Черный экран после заставки

#android #kotlin #splash-screen

#Android #kotlin #заставка

Вопрос:

Когда я открываю приложение, отображается заставка, а затем появляется черный экран (всего на 1 секунду), а затем переходит к действию. Как я могу избежать этого черного экрана?

Я установил заставку в качестве темы.

 class SplashActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (sharedPrefs.isUserLogged) {
            startActivity(intentFor<MainActivity>().clearTask().newTask())
        }else{
            startActivity(intentFor<LoginActivity>().clearTask().newTask())
        }
        finish()
    }
}
  

Я установил стиль заставки на своем AndroidManifest.xml

 <activity android:name=".view.splash.SplashActivity"
                  android:theme="@style/AppTheme.Launch">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
</activity>
  

и в моем стиле я установил для фона возможность рисования.

 <style name="AppTheme.Launch">
    <item name="android:windowBackground">@drawable/my_splash</item>
</style>
  

Комментарии:

1. пробовал <название элемента=»android: windowDisablePreview»> true</item>?

2. Почему вы не устанавливаете возможность рисования в макете действия заставки? Возможно, изменение стилей вызывает задержку.

3. @ShwetaChauhan да, но это пропускает заставку

4. @underoid Я следовал этому руководству android.jlelse.eu/… Если я установлю режим рисования в макете, перед заставкой будет белый экран, а черного экрана не будет.

5. Попробуйте установить одинаковый стиль для действий Main и Login и убедитесь, что их расположение охватывает весь экран. Я предполагаю, что таким образом, пока создается второе действие, вы будете продолжать видеть всплывающую панель вместо черного экрана.

Ответ №1:

Через некоторое время я нашел решение:

 class SplashActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    Timer().schedule(1000) {
       if (sharedPrefs.isUserLogged) {
           startActivity(intentFor<MainActivity>().clearTask().newTask())
       }else{
           startActivity(intentFor<LoginActivity>().clearTask().newTask())
       }
    }
  }
}
  

и я установил тему следующим образом:

 <style name="AppTheme.Launch">
    <item name="android:windowBackground">@drawable/my_splash</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>