Android アプリの内と外をつなぐ UI
URL:https://www.youtube.com/watch?v=7qh80shWF-A&list=PLaOdaBFokChyjXVKdwMfw6d3Of0Ea1L_C
一言で表すと
概要
アイスブレイクがうまい
今日からアキラになりました
司会の人が間違えたらしい
物理的なイベントは物理的に疲れる
スプラッシュ画面 splash screen
なんのため?
ブランディング?
アプリが起動するまでの時間稼ぎ?
(最重要)一刻も早くアプリのコンテンツを見せることが最優先
歴史
よくあった実装
Activity/Fragmentとして表示する
実際の画面の上にImageViewを重ねて表示し、消す
これらが正しいやり方だったことは一度もない
Activityが出せるならコンテンツを出せ
chigichan24.icon tsuyoi主張だ
正しい過去の実装
テーマの背景としてスプラッシュ画像を設定し、テーマを切り替える
Android 12以降はSplashScreen APIを使う
androidx.core-splashscreenライブラリを使う
Android 12前後で実装を変えてくれる
androidx.core-splashscren
スプラッシュ用のthemeを作る
本当に使いたいthemeはpostSplashScreenThemeにする
https://scrapbox.io/files/6374d6e86aa081001d43e4f4.png
Activityで設定する
onCreateでinstallSplashScreenを呼ぶ
setKeepOnScreenConditionが使える
lambdaがtrueを返す限りsplash screenを表示してくれる
https://scrapbox.io/files/6374d72a6cf90d001e1304ae.png
アニメーションのカスタマイズはサンプルアプリを見てね
端から端まで edge-to-edge
WindowInsets:システムとアプリのUIの間を調整するやつ
edge-to-edge:status bar / navigation barの裏にも描画するやつ
フルスクリーンモードとは違う
全てのアプリがedge-to-edgeにすべき
status bar / navigation barの色を合わせるのでも、それっぽくなるけど、ちゃんと対応すべき
今後多くのデバイスをサポートする上で重要になってくる
splash screenのライブラリもedge-to-edgeを前提にしている
設定方法
setDecorFitsSystemWindowを呼び出す
status bar / navigation barを透明にする
古いバージョンでは半透明にしたほうが良いかも
Mori Atsushi.icon これがえげついめんどくさいんだよなぁ
中のViewをずらす
setOnApplyWindowInsetsListener
キーボードを避ける
戻るジェスチャー back gesture
Android 13でOnBackInvokedDispatcherが追加された
戻るジェスチャーを補足する
結論
onBackPressedやKEYCODE_BACKで戻るジェスチャーを扱っているならonBackPressedDispatcher(androidx)に移行する
背景
ホームジェスチャーと戻るジェスチャーでアニメーションが異なる
ホームは指に追従してアニメーションする
戻るは簡単な三角が出るだけ
chigichan24.icon はえぇ気がついてなかったな
これを直したい
戻るも指に追従してホーム画面に戻したい
実行順序を変える必要がある
https://scrapbox.io/files/6374d96ea58aa2001f8e3ed3.png
新しいAPIのことを予測的戻ると言う
androidxのonBackPressedDispatcherを使えば良い
これはAndroid13の変更の伏線だった
Mori Atsushi.icon な、なんだって
ComposeはBackHandlerを使えばよい
気になるポイント
Mori Atsushi.icon アプリ内の画面遷移とかもアニメーションさせたくない?
Mori Atsushi.icon 予め宣言しないといけないから単純な移行ができないの辛いよね
メモ
コメント