Android
Abstract#
Android プログラムを実施した際に、覚えておきたいと思ったTIPS。
Topics#
画面デザイン#
- 画面の一番上にあるステータスバーの下にあるのが、タイトルバー。これを消すのもstyle.xmlとそれを呼び出すManufest.xmlの設定。
- 起動画面のことをスプラッシュスクリーンというらしい。デザインをかっこよくしたいが。。。
- ステータスバーの色
画面の一番上にある時間とか通知とか電波状態とか電池残量などが表示されるバーのことをステータスバーといいます。その色を変えるには、style.xmlに |
<item name="android:statusBarColor">@android:color/black</item>
画面遷移#
Manufestのアクティブティの宣言するところで指定しましょう。これを複数のActivityに設定してしまうと、インストール時に表示されるアイコンが複数になってしまったりして、かっこ悪いので気を付けましょう。 |
nav_graph.xmlで各Fragmentのアクションとして、遷移を定義しておきましょう。あと、最初の画面がどこか定義しておきましょう。 |
NavHostFragment.findNavController(MainFragment.this)
.navigate(R.id.action_MainFragment_to_DistFragment);
これをFragmentから呼び出します。シンプルですね。 |
- Activityの中から表示しているFragmentを遷移
NavHostFragment navHostFragment =
(NavHostFragment)getSupportFragmentManager()
.findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();
Fragment fragment = navHostFragment.getChildFragmentManager().getFragments().get(0);
if(fragment instanceof MainFragment) {
navController.navigate(R.id.action_MainFragment_to_SettingFragment);
}else if(fragment instanceof MapFragment){
navController.navigate(R.id.action_MapFragment_to_SettingFragment);
}else if(fragment instanceof CameraFragment){
navController.navigate(R.id.action_CameraFragment_to_SettingFragment);
}else {
//no action
}
ちょっとややこしくなってますが、やっていることは画面遷移を見えないところで操っているNavHostFragmentを見つけて、その子供となっている実際に画面に映っているFragmentを見つけて(ここ結構検索しました。。。)、そのFragmentにより、遷移先をnav_graph.xmlで定義したActionから引っ張ってくる感じです。 |
ファイルの扱い#
カメラを使って画像を作った後、なかなかファイルとして見つからず、一日後にファイルとして認識されるという事象がありました。それは、で出てくるContentResolverでinsert() とそれに必要なvalueの指定を入れることで解決。詳細はGNSSFinderのソースを見てください。 |
ローカルに設定ファイルを保存したいときは、Assetsフォルダを作りましょう。Android Studioからであれば、File->New->Folder->Assets Folderとやります。ファイルにアクセスするときはAssetsManagerを呼んで、OpenメソッドでInputStreamが得られます。 |
ローカルに動画ファイルを置くときに使ってみました。resフォルダの下にrawフォルダを作っておいて、動画ファイルを以下のURIで呼び出せます。 |
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.background_video);
''''
例がたくさん並んでいそうなページ発見。プログラムでSDカード上に画像ファイル作ってもなかなか識別されないからここにあるMediaScannerConnection.scanFileやらないとかも。今のところ不要か。 |
その他#
we cannot connect to Internet from UI thread. Let us use AsyncTask! |
しばらくAndroidで位置情報を扱うプログラムを作っていなかったら、APIの使い方とか変化していた。ちょっとやってみます。 |
FragmentにカスタムViewをFragmentクラスの中で生成して追加していたら、いつの間にか、FragmentContainerViewというものがLayoutの代わりに使われていて、それにViewを追加しようとすると、FragmentとAssociateしていないから駄目ですって怒られてアプリが落ちるようになった。Views added to a FragmentContainerView must be associated with a Fragment. View *** is not associated with a Fragment.とか言って。 |
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) のcontainerにaddView()しようとしただけなのだが。 |
仕方ないからFragmentのレイアウトXMLにカスタムViewを追加する形にした。この時、いつの間にかViewを継承したときのコントラクタは、View(Context)ではなくView(Context, AttributeSet)でないとだめになっていた。 |
Reference#
- http://shokai.org/blog/archives/5401
- Google, 2018, AsyncTask, https://developer.android.com/reference/android/os/AsyncTask
- moshimore(モシモア), 2016年11月4日, Android StudioでAssetsフォルダを簡単に作成する方法, https://knowledge.moshimore.jp/entry/android_assets_folder
- 株式会社GIG, 2021年7月アクセス, スプラッシュスクリーンでアプリ起動を劇的に!コードスニペット&事例19選, https://goworkship.com/magazine/splash-screen-design/
- @Futo_Horio, 2019年03月10日, 【 Android アプリ開発 】全画面表示を行う方法 ( 通知バー非表示 ), https://qiita.com/Futo_Horio/items/7bf65c4158bec6f30ffb
- K.I, Androidのファイルアクセス, https://bluefish.orz.hm/sdoc/android_file.html
- https://developer.android.com/guide/topics/providers/content-provider-basics?hl=JA
- Android ファイル読み込み(res/rawフォルダ、assetsフォルダ), http://yan-note.blogspot.com/2010/09/android-resrawassets.html
- ナビゲーション, https://developer.android.com/guide/navigation?hl=ja
- Stackoverflow, 2018年6月4日, How I can retrieve current fragment in NavHostFragment?, https://stackoverflow.com/questions/50689206/how-i-can-retrieve-current-fragment-in-navhostfragment
- @couzie, 2016年10月16日, App Bar, Status Bar, FAB, Navigation Drawer の色を変更する, https://qiita.com/couzie/items/b00764b694ca299d93cb
- ビュークラスを作成する, https://developer.android.com/training/custom-views/create-view?hl=ja#java
- 起動時のActivityを変更する, https://qiita.com/okhiroyuki/items/8410433493c83ff6b4ca
- How to usesetVideoURImethodin android.widget.VideoView, https://www.codota.com/code/java/methods/android.widget.VideoView/setVideoURI