DialogFragmentで作るライセンス情報
やりたいこと
いいかげんそろそろ、初心者補正効かないしきちんとアプリに使ったライブラリのライセンス情報書きたい。
んで、Google謹製アプリみたいな、ある程度きちんとしたライセンス情報表示をめざして、htmlファイルをプロジェクトのassetsフォルダに打ち込んで、それをDialogFragment内のWebViewでロードして表示、っていうののメモ。
ローカルファイルへのアクセスがうまくいかなくて、やんなった。
htmlでライセンス情報を書きこんだファイルの作成
これ見てコピペ
apatch2.0へのリンクを飛べるようにしてあげると、よりいいのかも。
Hrefタグでリンクです。
で、assetsフォルダ作成
AndroidStudioだと、左のフォルダ表示してるところから、いつもActivityとか作るときみたいに、
New → Folder → Assets Folder
すると、 app/src/main 配下にassetsってフォルダができる。
そこに先ほど作成したhtmlファイルを打ち込む。
build.gradleの編集
ここが、僕みたいな初心者に厳しいところ
ビルドとか、よくわかんないし
で、結論としては、appフォルダの中にある方のbuild.gradleの、android{}
の中に、
android {
//〜〜 省略 〜〜
sourceSets{
main{
assets.srcDirs=["src/main/assets"]
}
}
//〜〜 省略 〜〜
}
ってのを追加します。
自分でいじってなければ、buildTypesとdependenciesの間ね。
gradle関連のファイルいじるとでてくる上のSnackBarにみたいなやつのSync Nowってのをクリックすると、gradleがうまいことやってくれる。
assetsのパスはここだよって教えてあげてるらしいです。
僕みたいな初心者は、プロジェクト直下のbuild.gradleとappフォルダの中のbuild.gradleを間違えないでね。
これで、gradleが、assetsフォルダの場所を認識してくれたので、あとはWebViewでパスを指定してあげるだけです。
DialogFragmentとWebView
DialogFragmentを継承したクラスのonCreateDialogの中で、WebViewをfindViewして,
loadUrl("file:///android_asset/license.html")
してあげるだけでオッケー。
androidの前にスラッシュが三つあるのはミスじゃないです。
あと、プロジェクト内のフォルダ名はassetsなのに、assetってなってるのもミスじゃないです。
license.htmlは自分でさっき作ったファイル名ね。
ちなみに、グローバル変数でDialogを保持してonDestroyでnullってるのは、画面回転で落ちさせないためです。
たぶんこれで大丈夫。
public static class LicenseDialogFragment extends DialogFragment {
private Dialog licenseDialog;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (licenseDialog != null) {
return licenseDialog;
}
View root = View.inflate(getActivity(), R.layout.dialog_licence, null);
WebView webView = (WebView) root.findViewById(R.id.web);
// assets配下のlicense.htmlを指定
String htmlPath = "file:///android_asset/license.html"
webView.loadUrl(htmlPath);
return licenseDialog = new AlertDialog.Builder(getActivity())
// Titleは適当にOpen Source Licenseとかで
.setTitle(getString(R.string.license))
.setView(root)
.create();
}
@Override
public void onDestroy() {
super.onDestroy();
licenseDialog = null;
}
}
で、いまつくったこれを、適当なところのonClickとかで、DialogFragmentをshowする。
たぶんActionBarのメニューが妥当。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_license) {
LicenseDialogFragment licenceFragment = new LicenseDialogFragment();
licenceFragment.show(getSupportFragmentManager()
, LicenseDialogFragment.class.getSimpleName());
return true;
}
return super.onOptionsItemSelected(item);
}
}
てなわけで、できました。
gradleは勉強しなきゃっすね。
Appatchライセンスは、GooglePlayストアの紹介文にも載せてあげるといいそうですよ。
Author And Source
この問題について(DialogFragmentで作るライセンス情報), 我々は、より多くの情報をここで見つけました https://qiita.com/mickamy/items/2d1da3299d9061177bf6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .