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


111

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


1
あなたが始めている活動はそのonCreate役割をするのに時間がかかりすぎています。そのアクティビティで単に「setContentView」を試してみて、この遅延がなくなったかどうかを確認してください。
Sherif elKhatib

1
申し訳ありませんが、初心者でJavaの経験がありません。はっきりと説明していただけますか?そして、私がそれをチェックできるように「答え」を与えてください:)
匿名

1
プロジェクトでJavaまたはC#を使用していますか?
Sherif elKhatib 2013


回答:


104

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

4
しかしfinal ActionBar actionBar = getActionBar();、テーマが半透明の場合、使用するとnullが返されます
誰かがどこかに

16
Pankaj-はい、UIエクスペリエンスが悪いのは「プレビュー」ウィンドウが原因であることがわかりました...どうやらGoogleの誰かが、デフォルトで白いプレビューウィンドウを使用するのが本当に素晴らしいと判断しました。ただし、暗い背景を使用するアプリでは、これは非常に悪い考えです。解決策は、アプリのカスタムスタイルを作成し、使用する色に「android:windowBackground」を指定することです。「完璧なプレビューウィンドウ」のセクションを参照してくださいcyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
Someone Somewhere

2
@Hagai L「java.lang.IllegalStateException:このアクティビティでTheme.AppCompatテーマ(または子孫)を使用する必要があります」のようなエラーが表示されます。
TejaDroid、2016年

1
android:theme = "@ android:style / Theme.Translucent.NoTitleBar"が機能しませんでした。何か提案はありますか?
ジェイ2016

1
@TejaDroid停止エラー「java.lang.IllegalStateException」を取得するには、android.app.Activityでアクティビティを拡張する必要があります。現在、AppCompactActivityを使用しています。したがって、AppCompactActivityでは、通常のテーマを使用できません。
準備ができてAndroid

166

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

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


3
多くの面倒から救われたThx man。最初は設定ポイントを取得するのに苦労していました。メインテーマブロックになります:インライン `<style name =" AppTheme "parent =" Theme.AppCompat.NoActionBar "> <item name =" android:windowDisablePreview "> true </ item>`はメインスタイルのエントリポイントである必要があります.xml
HumaN 2016年

2
どうも!それをresフォルダーのstyle.xmlのstyleタグname = "AppTheme"(またはマニフェストで使用するテーマ)に入れます
Dimmduh

私のために働いた。ありがとうございました。
user1510006 2017

多くの開発者がカスタムテーマを使用しているため、これは受け入れられるべき答えだと思います
Sviatoslav Zaitsev

超役立つ:)
jasan

74

ここに画像の説明を入力してください

チューブのように..最初は白い画面ではなくアイコン画面を表示します。そして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/

更新:

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>

1
これは本当に素晴らしいですが、下にテキストを追加するにはどうすればよいですかmipmap/ic_launcher
Hasan A Yousef

6
これが最良の答えです。理由は、上記のソリューションを使用すると、アプリの視覚的な起動に遅延が生じるためです。
Jnr 2017

ビットマップ制御する1つの以上の修正stackoverflow.com/questions/23079355/...
amorenew

1
これは受け入れられる答えであるはずです。他のすべては、ユーザーの視点からアプリが開始されなかったように見せかけるだけです。シンプルな描画可能にlayer-list:このことができます <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Background color --> <item android:drawable="@color/white"/> <!-- Logo at the center of the screen --> <item android:drawable="@mipmap/ic_launcher" android:gravity="center"/> </layer-list>
フランコ

このソリューションは、レイヤーリストの背景色をプログラムで変更する場合(例では灰色から青色など)、問題を解決しません。このシナリオでは、最初に灰色の画面が2〜2秒表示され、次に青い背景が設定されます。
Mohammad Afrashteh

71

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

8

Cyril Mottierによるこの素晴らしい投稿を読んでください:Androidアプリの起動が豪華になりました

あなたThemeはstyle.xmlであなたをカスタマイズする必要があり、あなたの中でカスタマイズすることを避けるonCreate、ActionBar.setIcon / / etcとして。

Googleのパフォーマンスに関するヒントのドキュメントもご覧ください。

を使用Trace ViewHierarchy Viewerて、ビューを表示する時間を確認します。Androidパフォーマンスの最適化 / Androidでのパフォーマンスチューニング

AsyncTask一部のビューを表示するために使用します。


6

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


4

どちらのプロパティも、どちらか一方を使用します。

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

4

user543の答えは完璧です

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

だが:

You'r ランチャー活動必見のextandsの活動ではなく、AppCompatActivityそれはデフォルトで来ました!


どこでもこの同じソリューションを書いたので何度もこのソリューションを試しましたが、うまくいきませんでした->しかし、あなたの時間を節約できますが、私のアクティビティがAppCompatActivityを拡張するため、機能しません。
Rucha Bhatt Joshi

4

白い背景はAppthemeからのものです。白い画面の代わりに、アプリケーションのロゴのような便利なものを表示できます。カスタムのテーマを使用して行うことができます。

android:windowBackground=""

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


これは機能します。ウィンドウに透明色を設定するとより良いです。 <item name="android:windowBackground">@android:color/transparent</item>
Amol Desai 2016

これは受け入れられる答えであるはずです。とにかく、YouTubeアプリのようにスケーリングのアニメーションを追加する方法を知っていますか。
プラタムケサルカール2017

白の代わりに今は黒です。
Ümañgßürmån

2

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

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>

2

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

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

理由と解決策は、私が作成したこのブログ投稿で確認できます。それが役に立てば幸い。


詳細を直接回答に追加してください。リンクが無効になる可能性があるため、回答に実際のコンテンツを含めることをお勧めします。リンクは補足的なものです。
OOBalance

1

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

<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

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

<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>

0

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

「ファイル」>「設定」>「ビルド、実行、デプロイメント」>「インスタント実行」に表示されているすべてのオプションのチェックを解除します。

注:Instant Runに起因する白い画面の問題はデバッグビルドのみに発生します。この問題はリリースビルドでは表示されません。


0

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

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


コードのみの回答はお勧めしません。編集をクリックして、コードが質問にどのように対処するかを要約するいくつかの単語を追加するか、おそらくあなたの回答が以前の回答とどのように異なるかを説明してください。レビューから
Nick

0

そのソリューションは非常に簡単です!

この問題には3つの基本的な理由があります

  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

これは問題を解決しました:

styles.xmlファイルを編集します。


以下のコードを貼り付けてください:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

</resources>

そして、AndroidManifest.xmlファイルに変更を加えることを忘れないでください。(テーマ名

このファイル内のアクティビティの宣言順序に注意してください。


0
I encountered a similar problem and to overcome it, I implemented the code below in styles, i.e res->values->styles->resource tag 
<item name="android:windowDisablePreview">true</item>

Here is the whole code:

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDisablePreview">true</item>
</style>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.