起動時に2秒間白い画面を表示するAndroidアプリがあります。私の他のアプリはこれを行いませんが、これは行います。また、これが修正されることを期待して、スプラッシュスクリーンを実装しました。スプラッシュスクリーンのスリープ時間を増やす必要がありますか?ありがとう。
AndroidManifest.xmlファイルで開始アクティビティに透明なテーマを指定するだけです。
のような:
<activity
Android:name="first Activity Name"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Activity
の代わりにAppCompatActivity
クラスでその画面を拡張します。
のような:
public class SplashScreenActivity extends Activity{
----YOUR CODE GOES HERE----
}
これをカスタムスタイルにすると、すべての問題が解決します。ハックした半透明の修正を使用すると、タスクバーとナビゲーションバーが半透明になり、スプラッシュスクリーンまたはメイン画面がスパゲッティのように見えます。
<item name="Android:windowDisablePreview">true</item>
次のように、style.xmlでスタイルを作成します。
<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>
</style>
androidManifestでのアクティビティで次のように使用します。
<activity Android:name=".ActivitySplash" Android:theme="@style/Theme.Transparent">
チューブのように。最初は、白い画面の代わりにアイコン画面が表示されます。そして2秒後にホーム画面が表示されます。
最初にres/drawableでXMLドロアブルを作成します。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:drawable="@color/gray"/>
<item>
<bitmap
Android:gravity="center"
Android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>
次に、これをテーマのスプラッシュアクティビティの背景として設定します。 styles.xmlファイルに移動し、スプラッシュアクティビティの新しいテーマを追加します
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/background_splash</item>
</style>
</resources>
新しいSplashThemeで、ウィンドウの背景属性をXMLドロアブルに設定します。これをAndroidManifest.xmlでスプラッシュアクティビティのテーマとして設定します。
<activity
Android:name=".SplashActivity"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
このリンクはあなたが欲しいものを与えます。ステップごとの手順。 https://www.bignerdranch.com/blog/splash-screens-the-right-way/
UPDATE:
layer-list
は、次のようにさらにシンプルにすることができます(<bitmap>
タグとは異なり、中央のロゴのベクタードロウアブルも受け入れます)。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- Background color -->
<item Android:drawable="@color/gray"/>
<!-- Logo at the center of the screen -->
<item
Android:drawable="@mipmap/ic_launcher"
Android:gravity="center"/>
</layer-list>
Cyril Mottierによるこの素晴らしい投稿を読む必要があります: Androidアプリの起動がゴージャスになりました
Style.xmlでTheme
をカスタマイズし、onCreate
でActionBar.setIcon/setTitle/etcとしてカスタマイズすることを避ける必要があります。
Googleによる Performance Tips のドキュメントも参照してください。
Trace View
およびHierarchy Viewer
を使用して、ビューを表示する時間を確認します。 Android Performance Optimization / Androidでのパフォーマンスチューニング
AsyncTask
を使用して、いくつかのビューを表示します。
これは、サンプルアプリのAppThemeです。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:windowIsTranslucent">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
ご覧のとおり、デフォルトの色があり、Android:windowIsTranslucent
を追加してtrue
に設定します。
私がAndroid開発者として知っている限り、これは、アプリケーションの起動時に白い画面を非表示にするために設定する必要がある唯一のものです。
両方のプロパティが機能しますそれらのいずれかを使用します。
<style name="AppBaseThemeDark" parent="@style/Theme.AppCompat">
<!--your other properties -->
<!--<item name="Android:windowDisablePreview">true</item>-->
<item name="Android:windowBackground">@null</item>
<!--your other properties -->
</style>
白い背景はAppthemeから来ています。白いscreen.itの代わりに、アプリケーションのロゴのような便利なものを表示することができます。
Android:windowBackground=""
属性。属性値は、画像、レイヤードリスト、または任意の色です。
ser543 answer は完璧です
<activity
Android:name="first Activity Name"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
しかし:
あなたはLAUNCHERアクティビティは拡張する必要がありますアクティビティではなくAppCompatActivityデフォルトで来たように!
私のプロジェクトでも同じ問題が発生しました。スプラッシュスクリーンに提供されるテーマに次のパラメーターを追加することで解決しました。
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>
理由と解決策は、私が書いた このブログ投稿 にあります。それが役に立てば幸い。
マニフェストでテーマを次のように設定することで修正できます
<activity
Android:name=".MySplashActivityName"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
その後、取得している場合
Java.lang.IllegalStateException:このアクティビティではTheme.AppCompatテーマ(または子孫)を使用する必要があります。
次に、MySplashActivityでAppCompatActivityの代わりにActivityを拡張する必要がある場合があります。
それが役に立てば幸い!
以下は、スプラッシュ画面の設計方法を提案するリンクです。白/黒の背景を回避するには、スプラッシュ背景でテーマを定義し、マニフェストファイルでそのテーマをスプラッシュに設定する必要があります。
https://Android.jlelse.eu/right-way-to-create-splash-screen-on-Android-e7f1709ba154
res/drawableフォルダー内のsplash_background.xml
<?xml version=”1.0" encoding=”utf-8"?>
<layer-list xmlns:Android=”http://schemas.Android.com/apk/res/Android">
<item Android:drawable=”@color/colorPrimary” />
<item>
<bitmap
Android:gravity=”center”
Android:src=”@mipmap/ic_launcher” />
</item>
</layer-list>
以下のスタイルを追加
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- Splash Screen theme. -->
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/splash_background</item>
</style>
マニフェストでは、下に示すようにテーマを設定します
<activity
Android:name=".SplashActivity"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
白い背景は、アプリがメモリに読み込まれている間にAndroidが起動するために発生します。SplashThemeの下にこの2行のコードを追加するだけで回避できます。
<item name="Android:windowDisablePreview">true</item>
<item name="Android:windowIsTranslucent">true</item>
その解決策は非常に簡単です!
この問題の基本的な理由があります
解決策:
解決策1:
Remove the Heavy Task from onCreateView() function and place it some where appropriate place.
解決策2:
Reduce the Thread Sleep time.
解決策3:
Remove the Third party library at app initialize at implement them with some good strategy.
私の場合、この問題を引き起こすSugar ORMを使用しています。
共有して改善します。
instant Run Android studio設定を無効にする必要があります。
[ファイル]> [設定]> [ビルド、実行、展開]> [すぐに実行]に表示されるすべてのオプションのチェックを外します。
注:ホワイトスクリーンの問題Instant Runはデバッグビルド専用であり、この問題はリリースビルドには表示されません。
次のコードを試してください:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>
</style>
このコードは私のために機能し、すべてのAndroidデバイスで機能します。