android12からのSplashScreenについてメモ&削除方法追記(しかし更なる問題が.......)
android12からのSplashScreenとは
androidには今までちゃんとしたsplashが存在しなかったので
android12で遂に実装しましたよ!!というもの。
基本的にthemeとかdrawbleで設定するだけなので
複雑なsplashを作ることはできなそう。
なので複雑なsplashを使いたい人は
SplashScreen+専用のActivityなどの混合で対応する必要がありそう。
それならSplashScreen消したほうがいいんじゃない???
とは思ったが消すことができない
(消す方法を発見しました!!)
&今まで出てこなかったタイミングで勝手に出てくる
ようになってしまったみたいです。
今まで出てこなかったタイミングというのは
ウォームスタートというタイミングみたいです。
詳しくはこちら
なので変に消すと逆に変な描画になってしまうので
両方表示されても違和感のないぐらいのデザインに落とし込むのが
ベターなのかなぁという印象です。
android12以前でもSplashScreenを使いたい
こちら
を使うことで
android12以前でも同じような挙動のsplashを作成することができるようです。
SplashScreenを消す
ベースとなるActivityのテーマに
<item name="android:windowIsTranslucent">true</item>
こちらを追記することで
SplashScreenを透明にすることで実質消すことができる。
あまりよくわかっていないが
この対応をすることでアプリが応答していないように見える
(透明にしてしまっているのでウォームスタートとかで変な表示になるのかも?)
らしいので、その場合はこのようにするといいらしい
private void setupOnPreDrawListenerToRootView() {
View mViewContent = findViewById(android.R.id.content);
mViewContent.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
Log.v("onPreDraw","onPreDraw called");
if (isAppInitialized) {
mViewContent.getViewTreeObserver().removeOnPreDrawListener(this);
startActivity(new Intent(this, MainActivity.class));
return true;
} else {
// The content is not ready; suspend.
return false;
}
}
});
}
しかし更なる問題が........
アプリテーマにこちらを設定すると
なんとandroid8でクラッシュします
ほんまandroid8くん........
回避方法は恐らくないのでandroid8対応を諦めるしかなさそうです。
フルComposeのプロジェクトだと
activityにxmlレイアウトを組み込む必要がないので
回避できるかと思ったんですがだめでした;;;;;;
参考記事
Discussion