web-dev-qa-db-ja.com

スプラッシュの前に空白の画面が表示される

主な問題は、2〜3秒後にスプラッシュスクリーンが表示されることです。スプラッシュ画面の前に、望まない空白のレイアウトが表示されます。それ以外の場合は正常に動作します。スプラッシュページの前に表示される空白のレイアウトを削除するだけです。

主な活動:

public class MainActivity extends Activity {

    private static String TAG = MainActivity.class.getName();
    private static long SLEEP_TIME = 5; // Sleep for some time

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  // Removes notification bar

        setContentView(R.layout.activity_main);

        // Start timer and launch main activity
        IntentLauncher launcher = new IntentLauncher();
        launcher.start();
    }

    private class IntentLauncher extends Thread {

        @Override
        /**
         * Sleep for some time and than start new activity.
         */
        public void run() {
            try {
                // Sleeping
                Thread.sleep(SLEEP_TIME*1000);
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }

            // Start main activity
            Intent intent = new Intent(MainActivity.this, Login.class);
            MainActivity.this.startActivity(intent);
            MainActivity.this.finish();
        }
    }

}

メインレイアウト

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:background="@drawable/splash"
    tools:context=".MainActivity" >

</RelativeLayout>
26
Somnath Pal

一般的に、スプラッシュスクリーンはアプリにはお勧めしませんが、本当に必要な場合はお勧めします。

Androidは、設定したテーマに基づいてアクティビティレイアウトを読み込む前に、空のレイアウトを読み込みます。解決策は、スプラッシュアクティビティのテーマを透明なものに設定することです。

res/values/styles.xmlに透明なテーマを作成します

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="Theme.Transparent" parent="Android:Theme">
      <item name="Android:windowIsTranslucent">true</item>
      <item name="Android:windowBackground">@Android:color/transparent</item>
      <item name="Android:windowContentOverlay">@null</item>
      <item name="Android:windowNoTitle">true</item>
      <item name="Android:windowIsFloating">true</item>
     <item name="Android:backgroundDimEnabled">false</item>
  </style>
</resources>

次に、マニフェストにテーマを設定します

<activity Android:name=".SplashActivity" Android:theme="@style/Theme.Transparent">
...
</activity>
25
Eoin

開始アクティビティにはテーマの背景を使用することをお勧めしますが、メインアクティビティを起動する前に空白の画面を表示したくない場合は、次のようにアクティビティを定義できます。

追加 Android:windowDisablePreviewAppTheme res/values/styles.xmlで:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="AppTheme" parent="Android:Theme">
        <item name="Android:windowDisablePreview">true</item>
  </style>
</resources>

次に、マニフェストでアクティビティテーマを設定します。

<activity Android:name=".MainActivity" Android:theme="@style/AppTheme">
...
</activity>

追伸:設定Android:windowDisablePreviewはアクティビティの背景に影響しないため、心配する必要はありません。

22
Keivan Esbati

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>
5
Narendra Singh

ここで直面している問題は「コールドスタート」と呼ばれ、主にApplication.onCreateメソッド。通常、いくつかの初期化が行われ、希望よりも時間がかかる場合があります。こちらの公式ドキュメントをご覧ください: https://developer.Android.com/topic/performance/launch-time.html

これが当てはまる場合、テーマを半透明に設定するか、他の人が示唆したようにプレビューを無効にすると、問題が明らかに解決するだけです。実際には、アプリを起動しようとしますが、アプリをタップしたという事実に関するフィードバックを受け取らないためですアイコン。アプリは遅延から始まりますが、これは望ましいUXではありません。

空白、黒または白の画面、それは本当にAndroid:windowBackground属性がメインアクティビティテーマで指定されています。おそらくあなたがしている初期化のいくつかをApplication.onCreate方法、この投稿で提案されているように、ロゴでプレビューウィンドウにブランドを付けることです。

https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

スプラッシュ画面でロゴ画像をアニメーション化するか、または以下に説明するようにメインアクティビティコンテンツにスムーズに移行できるようにプレビューウィンドウを設計することにより、さらに進んでユーザーエクスペリエンスを改善できます。

http://saulmm.github.io/avoding-Android-cold-starts

同じ質問がここで正しく回答されています: https://stackoverflow.com/a/40482549/70942 このブログ投稿で説明されています: https://www.bignerdranch.com/blog/ splash-screens-the-right-way /

5
raducoti

本当に!以下のリンクは私のために働く!!!!

https://cyrilmottier.com/2013/01/23/Android-app-launching-made-gorgeous/

スプラッシュスクリーン用にstyle.xmlに個別のスタイルを記述して、両方のスクリーンを相互に関連付けられるようにします。

ここでスタイル:

<style name="AppTheme.Splash" parent="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="Android:windowBackground">@drawable/splash_final</item>
    </style>
3
JoboFive

Android機能。空白画面の背景色を変更できます。スタイルを使用します。

<resources>
<style name="Theme" parent="Android:style/Theme" />
<style name="Theme.MainTheme" parent="Theme">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowBackground">@drawable/background_drawable</item>
</style>
</resources>

それをマニフェストで使用します:

<application
    Android:name="@string/app_name"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/Theme.MainTheme"
     >
2
Android Android

これをスタイルファイルに追加します

    <item name="Android:windowDisablePreview">true</item>
0
Shally pathak

Android Studio。のビルドツールを更新するだけで修正しました。

0
Brent

これは、上に投稿されたいくつかの答えに似ていると思います。スプラッシュスクリーンを適切な方法で作成する方法について、次のBig Nerd Ranchガイドをお勧めします。以下に進む代わりに、実際にそこに行って読んでください:)。 https://www.bignerdranch.com/blog/splash-screens-the-right-way/

しかし、要するに、アプリの起動時に最初のスプラッシュアクティビティを起動することです。このアクティビティでは、XMLドロアブル(@drawable/background_splash)。

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

次に、スプ​​ラッシュアクティビティのテーマを作成し、上で作成したドロアブルをウィンドウの背景として設定します。

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="Android:windowBackground">@drawable/background_splash</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>

最後に、スプラッシュアクティビティで、以下のようなthe onCreateメソッドを実装します(アクティビティで必要なすべてのコード)。これにより、メインアクティビティが起動され、スプラッシュアクティビティが終了します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    finish();
}
0
lejonl

このスタイルを追加

 <style name="Theme.Transparent" parent="AppTheme">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="Android:windowDisablePreview">true</item>
        <item name="Android:windowContentOverlay">@null</item>
 </style>

以下のコードのように、レイアウトから画像をロードするよりも、スプラッシュ画面に画像をロードする場合

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:tools="http://schemas.Android.com/tools"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@color/color_white">
    <ImageView
            Android:id="@+id/ivSplash"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/SPLASH_IMAGE"
            />
</LinearLayout>
0
Prashant Arvind

AppCompatActivityのサポート付き

res/values/styles.xml

<style name="SplashTheme" parent="AppTheme">
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="Android:windowFullscreen">true</item>
    <item name="Android:windowIsTranslucent">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:backgroundDimEnabled">false</item>
    <item name="Android:windowDisablePreview">true</item>
</style>

GL

ソース

0
CORONEL Braian