2016-06-18 7 views
2

Я пытаюсь выполнить свое приложение на своей галактике s5 и s6, но на этом устройстве мое приложение не показывает заставку (фон из ImageView) (приложение показывает белый экран и переходит к основному) , Я пытаюсь создать виртуальное устройство на студии Android, и он работает без проблем. кто-нибудь знает, почему это произошло, и как я могу это исправить?Android-заставка не отображается на реальном устройстве

Мой SplashScreen Класс -

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

@Radix I Внесите изменения, но все же, чтобы помочь – 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(); 
} 

попробовать это :)

Скрыть панель действий После setContentView

+0

Извините, но это ничего не меняет. – kbok

+0

попробуйте отредактированный код, если он помогает или нет? –

+0

Извините, но это не помогает – kbok

0

У вас есть 2 варианта в зависимости от того, что вы хотите сделать.

Вариант 1

Вы хотите просто показать экранную заставку и двигаться дальше. В фоновом режиме не происходит тяжелой загрузки/подготовки данных.

В этом случае создайте SplashActivity, у которого есть ваше изображение либо в качестве фона, либо внутри ImageView. Внутри onCreate() SplashActivity делать это:

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

Где SPLASH_TIMEOUT это время в миллисекундах вы хотите, чтобы отобразить экран заставки.

Вариант 2

Показать заставка в то время как данные загружаются в фоновом режиме.

В этом случае положите ImageView на вершину иерархии и сделайте ее ширину и высоту match_parent. Дайте ему идентификатор, на который будет ссылаться код.

После того, как вы закончите загрузки/извлечения данных, которые вы, вероятно, есть некоторые функции обратного вызова, информирующие о том, что все сделано, и как раз в том, что обратный вызов сделать

splashImage.setVisibility(View.GONE); 

и вот это!

+0

Я пробую это (Option1), но все же у меня есть белый экран – kbok

+0

У вас есть ImageView в макете всплеска или вы установили изображение в качестве фона макета? – Chapz

+0

У меня есть ImageView в макете всплеска – kbok

0

здесь это шаблон google ui для Launch Screens, проблема в том, что вы неправильно его реализуете, используя задержку, пользователь не должен ждать времени, затрачиваемого на запуск «приложения» + задержка, я сделал эту ошибку и раньше, всплывающее представление, которое вы видите, должно быть готово немедленно, прежде чем вы покажете файл макета в своей активности всплеска, так что это правильный способ его реализации:

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 - И, наконец, в вашей деятельности SplashScreen просто перейдите к основной деятельности.

public class SplashScreen extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent intent = new Intent(this, MainActivity.class); 
     startActivity(intent); 
     finish(); 
    } 
} // SplashScreen class end 

Это должно занимать обычное количество времени, затрачиваемого на запуск «приложения», и между ними не происходит задержек.

Смежные вопросы