web-dev-qa-db-ja.com

アプリの起動時に白い画面を修正するには?

起動時に2秒間白い画面を表示するAndroidアプリがあります。私の他のアプリはこれを行いませんが、これは行います。また、これが修正されることを期待して、スプラッシュスクリーンを実装しました。スプラッシュスクリーンのスリープ時間を増やす必要がありますか?ありがとう。

101
Anonymous

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----
}
98
user543

これをカスタムスタイルにすると、すべての問題が解決します。ハックした半透明の修正を使用すると、タスクバーとナビゲーションバーが半透明になり、スプラッシュスクリーンまたはメイン画面がスパゲッティのように見えます。

<item name="Android:windowDisablePreview">true</item>

153
ireq

次のように、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">
66
Tarun

enter image description here

チューブのように。最初は、白い画面の代わりにアイコン画面が表示されます。そして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>
66
Abhi

Cyril Mottierによるこの素晴らしい投稿を読む必要があります: Androidアプリの起動がゴージャスになりました

Style.xmlでThemeをカスタマイズし、onCreateでActionBar.setIcon/setTitle/etcとしてカスタマイズすることを避ける必要があります。

Googleによる Performance Tips のドキュメントも参照してください。

Trace ViewおよびHierarchy Viewerを使用して、ビューを表示する時間を確認します。 Android Performance Optimization / Androidでのパフォーマンスチューニング

AsyncTaskを使用して、いくつかのビューを表示します。

7
Fllo

これは、サンプルアプリの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開発者として知っている限り、これは、アプリケーションの起動時に白い画面を非表示にするために設定する必要がある唯一のものです。

5
luiscosta

両方のプロパティが機能しますそれらのいずれかを使用します。

    <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>
3
Sohail Zahid

白い背景はAppthemeから来ています。白いscreen.itの代わりに、アプリケーションのロゴのような便利なものを表示することができます。

Android:windowBackground=""

属性。属性値は、画像、レイヤードリスト、または任意の色です。

3
Rajesh.k

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デフォルトで来たように!

3
Igor Fridman

私のプロジェクトでも同じ問題が発生しました。スプラッシュスクリーンに提供されるテーマに次のパラメーターを追加することで解決しました。

<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>

理由と解決策は、私が書いた このブログ投稿 にあります。それが役に立てば幸い。

2
divaPrajapati09

マニフェストでテーマを次のように設定することで修正できます

<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を拡張する必要がある場合があります。

それが役に立てば幸い!

1
Mr. Rabbit

以下は、スプラッシュ画面の設計方法を提案するリンクです。白/黒の背景を回避するには、スプラッシュ背景でテーマを定義し、マニフェストファイルでそのテーマをスプラッシュに設定する必要があります。

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>
1
Rocky

白い背景は、アプリがメモリに読み込まれている間にAndroidが起動するために発生します。SplashThemeの下にこの2行のコードを追加するだけで回避できます。

<item name="Android:windowDisablePreview">true</item>
<item name="Android:windowIsTranslucent">true</item>
0
Farid Haq

その解決策は非常に簡単です!

この問題の基本的な理由があります

  1. OnCreateVeiw関数でヘビー/長時間実行/複雑なタスクを実行しています。
  2. スレッドを使用している場合。 スレッドのスリープ時間は非常に大きい場合があります。
  3. サードパーティライブラリを使用している場合。これは初期化アプリで起動この問題が発生する可能性がある時間です。

解決策:

解決策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を使用しています。

共有して改善します。

0
Sheharyar Ejaz

instant Run Android studio設定を無効にする必要があります。

[ファイル]> [設定]> [ビルド、実行、展開]> [すぐに実行]に表示されるすべてのオプションのチェックを外します。

注:ホワイトスクリーンの問題Instant Runはデバッグビルド専用であり、この問題はリリースビルドには表示されません。

0
Mina Farid

次のコードを試してください:

<!-- 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デバイスで機能します。

0
Hits sapra