Подтвердить что ты не робот

Пустой экран появляется перед всплеском

Основная проблема заключается в том, что заставка появляется через 2-3 секунды. Перед экраном заставки появляется пустой макет, который я не хочу. В противном случае он работает нормально. Просто удалите пустой макет, который появляется перед всплывающей страницей.

MainActivity:

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

Ответ 1

Вообще говоря, заставки не рекомендуется для приложения, но если вы действительно должны.

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>

Ответ 2

Лучше использовать Тематический фон для начального действия, но если вы не хотите, чтобы пустой экран отображался перед запуском основной активности, вы можете определить свою активность следующим образом:

Добавьте android:windowDisablePreview в AppTheme в 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>

P.S: Настройка android:windowDisablePreview не влияет на ваш фокус активности, поэтому вам не о чем беспокоиться.

Ответ 3

Просто укажите прозрачную тему для запуска в файле 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>

Ответ 4

Проблема, с которой вы столкнулись здесь, называется "холодный старт", и это время, затрачиваемое главным образом на ваш метод 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

Здесь правильно ответил тот же вопрос: fooobar.com/questions/18186/... и описан в этом сообщении в блоге: <а4 >

Ответ 5

Действительно! ниже ссылка работает для меня!!!!

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>

Ответ 6

Это особенности 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"
     >

Ответ 7

Я исправил мой, просто обновив инструменты сборки в Android Studio.

Ответ 8

Я думаю, что это похоже на некоторые ответы, которые были опубликованы выше. Я все еще хотел бы порекомендовать следующее руководство Big Nerd Ranch о том, как правильно создать заставку, потому что она хорошо проиллюстрирована и проста в использовании. Вы действительно должны пойти туда и прочитать это вместо продолжения ниже :). https://www.bignerdranch.com/blog/splash-screens-the-right-way/

Короче говоря, это означает, что при запуске приложения вы запускаете начальную заставку. Для этого действия вы создаете XML drawable (@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>

Наконец, в вашей активности onCreate метод onCreate как onCreate ниже (это весь код, который вам нужен в упражнении). Это запустит ваше основное действие и завершит всплывающее действие:

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

Ответ 9

Добавьте это в свой файл стилей

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

Ответ 10

С поддержкой AppCompatActivity

RES/значения /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

Источник

Ответ 11

Добавить этот стиль

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