2016-06-18 15 views
2

私のgalaxy s5およびs6でアプリケーションを試していますが、このデバイスではアプリケーションがスプラッシュ画面(ImageViewの背景)を表示しません(このアプリケーションは白い画面を表示し、 。私はアンドロイドスタジオの仮想デバイスを試して、それは問題を解決して動作します。なぜこれが起こったのか誰にも知ってもらえますか?どのように修正できますか?Androidデバイスのスプラッシュ画面が実際のデバイスに表示されない

マイスプラッシュクラス -

protected void onCreate(Bundle savedInstanceState) { 

    // hide action bar from the activity 
    android.support.v7.app.ActionBar actionBar = getSupportActionBar(); 
    actionBar.hide(); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash_screen); 

    /****** Create Thread that will sleep for 6 seconds *************/ 
    Thread background = new Thread() { 
     public void run() { 

      try { 
       // Thread will sleep for 6 seconds 
       sleep(6 * 1000); 

       // After 5 seconds redirect to another intent 
       Intent i = new Intent(getBaseContext(), MainActivity.class); 
       overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
       startActivity(i); 

       //Remove activity 
       finish(); 

      } catch (Exception e) { 

      } 
     } 
    }; 

    // start thread 
    background.start(); 
} 

ありがとう!

+1

'Thread.sleep()'は使わないでください。代わりに、あなたがやりたいことを実行するために 'handler.postDelayed()'を使います。 –

+0

@ラジオ私は変更を加えても助けてくれる – kbok

答えて

0
protected void onCreate(Bundle savedInstanceState) { 



super.onCreate(savedInstanceState); 
setContentView(R.layout.splash_screen); 

getSupportActionBar().hide(); 


/****** Create Thread that will sleep for 6 seconds *************/ 
Thread background = new Thread() { 
    public void run() { 

     try { 
      // Thread will sleep for 6 seconds 
      sleep(6 * 1000); 

      // After 5 seconds redirect to another intent 
      Intent i = new Intent(getBaseContext(), MainActivity.class); 

      startActivity(i); 
      overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 

      //Remove activity 
      finish(); 

     } catch (Exception e) { 

     } 
    } 
}; 

// start thread 
background.start(); 
} 

これを試してみてください:)

隠すアクションバーをあなたが何をしたいかに応じて、2つのオプションを持ってsetContentView

+0

申し訳ありませんが、これは何も変わりません。 – kbok

+0

編集したコードを参考にしてみてください。 –

+0

申し訳ありませんが、助けてくれません – kbok

0

後。あなただけのスプラッシュ画面を表示し、上に移動したい

オプション1

。重いデータのロード/準備はバックグラウンドでは発生していません。

この場合は、画像を背景またはImageView内に持つSplashActivityを作成します。 SPLASH_TIMEOUTあなたはスプラッシュ画面を表示させたいミリ秒単位の時間である

Handler handler = new Handler(); 
handler.postDelayed(new Runnable(){ 
    startActivity(SplashActivity.this, MainActivity.class); 
}, SPLASH_TIMEOUT); 

:SplashActivityのonCreate()内部でこれを行います。

オプション2

ショースプラッシュ画面データは、バックグラウンドでロードされている間。

この場合、ビュー階層の上にImageViewを置き、幅と高さをmatch_parentにします。それはコードから参照されるいくつかのIDを与えます。

あなたはおそらく、すべてが行われていることを通知、いくつかのコールバックを持ってデータをフェッチ/ロード行われ、ちょうどそのコールバックでされた後は、

splashImage.setVisibility(View.GONE); 

をして、それのthats!

+0

私はこれを試してみましたが(Option1)、まだ白い画面が表示されています – kbok

+0

ImageViewはスプラッシュレイアウトになっていますか、レイアウトの背景としてイメージを設定しましたか? – Chapz

+0

私はスプラッシュレイアウトでImageViewを持っています – kbok

0

ここではLaunch ScreensのgoogleのUIパターンですが、問題は遅延を使用して間違った方法で実装しているため、ユーザーは「アプリ」を起動するのにかかる時間を待つべきではない+遅延、私も前にこのエラーを作りました。スプラッシュアクティビティにレイアウトファイルを表示する前に、あなたが見るスプラッシュビューがすぐに準備されている必要があります。

1 - 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/common_signin_btn_dark_text_default"/> 
<item> 
    <bitmap 
     android:gravity="center" 
     android:src="@mipmap/ic_launcher"/> 
</item> 

</layer-list> 

2 - Res/Valuesに移動し、レイアウトを追加するstyles.xmlを編集します。

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:windowBackground">@drawable/splashscreen</item> 
</style> 

3 - AndroidManifest.xmlファイルで、作成したテーマを使用するようにSplashScreenアクティビティを設定します。

<activity 
     android:name=".SplashScreen" 
     android:theme="@style/SplashTheme"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 

4 - そして最後に、あなたのスプラッシュ活動にちょうどあなたのメインの活動にそれを転送します。

"app"を起動して間に遅延を実装するのに費やされる通常の時間がかかるだけです。

関連する問題