Android - Отключить фиктивное начальное окно приложения

Я хочу знать, как добиться этого эффекта.

Мое приложение (по умолчанию все), когда щелкнули значок запуска, сразу же отобразите какое-то пустое фиктивное окно, где ничего не происходит, а затем загружает в него макет.

"Тяжелые" приложения, такие как YouTube, Диск, Dropbox и т.д. при запуске, похоже, ждут после запуска, не показывая это фиктивное окно и не загрузится прямо в готовый макет.

Любая идея, как это сделать или где я должен искать?

Спасибо

//EDIT: это не имеет ничего общего с загрузкой базы данных, где я должен отображать progressBar, imho это связано с тем, что до того, как существует активность.

Ответ 1

<style name="Theme.MyTheme" parent="android:style/Theme" >
    ....
    <item name="android:windowDisablePreview">true</item>
    ....
</style>

но используйте с осторожностью

Ответ 2

Я предлагаю вам не отключать окно загрузки фиктивных файлов, используя:

<style name="Theme.MyTheme" parent="android:style/Theme" >
    ....
    <item name="android:windowDisablePreview">true</item>
    ....
</style>

потому что вы можете столкнуться с несколькими проблемами. Например, если вы пытаетесь анимировать AlertDialog, введите анимацию не будет (личный опыт).

Правильным решением является установка темы вашего приложения, как на ваш основной экран активности (тот же стиль ActionBar, тот же цвет фона). В моем приложении после экспериментов с несколькими экземплярами я нашел правильное решение для своих нужд. (У меня есть основное действие с пустым фоном, без ActionBar, только полноэкранный персональный макет)

1 - styles.xml: добавьте новый стиль (удалите ActionBar и установите тот же фоновый цвет моей основной деятельности)

<style name="LoadingTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
    <item name="android:windowBackground">@color/white_smoke</item>
</style>

2 - AndroidManifest.xml: установите для моей основной темы тему "LoadingTheme"

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
        <activity
            android:name="com.company.appname.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/LoadingTheme">
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
    </activity>
    ....
</application>

И, наконец, у меня есть полное пустое загрузочное окно без ActionBar с мягкой загрузкой MainActivity и рабочими анимациями.

Надеюсь быть полезным.

Ответ 3

Вы можете вызвать метод setContentView, где бы вы ни находились в своей деятельности. Перед вызовом этого метода он отобразит пустой экран. Если вы хотите использовать заставку, вы можете вызвать метод setContentView в методе onCreate, чтобы отобразить представление заставки. Затем, когда вы готовы отобразить "основное" представление, вы можете использовать LayoutInflater для его отображения. Я также предлагаю использовать ProgressDialog, чтобы показать пользователю, что информация загружается.

Ответ 4

Загрузите ресурсы перед настройкой содержимого. Будет фиктивное окно, пока вы не установили представление с помощью setContentView.

ИЗМЕНИТЬ Чтобы избежать этого экрана. Внесите изменения в свой код.

1) Не делайте тяжелой работы в методе onCreate. Запустите для него отдельный поток.

2) Установите представление содержимого прямо после строки super.onCreate()

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

3) Примените следующую тему к вашему приложению.

Определить тему в стиле

<resources>
<style name="Theme.MyTheme" parent="android:style/Theme" >
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowBackground">@drawable/any_default_background</item>

</style>
</resources>

В вашем манифесте

      <application
        ....

        android:theme="@style/Theme.MyTheme"
        ....
         > 

Thats It.

Ответ 5

Это создаст пользовательское окно предварительного просмотра для вашей активности.

Создайте стиль в styles.xml, например

<style name="MyTheme" parent="@android:style/Theme.Holo.NoActionBar">
    <item name="android:windowBackground">@color/myBackgroundColor</item>
</style>

В вашем файле манифеста используйте тему, созданную выше. Например,

<activity android:name=".MyActivity"
   android:label="@string/app_name"
   android:theme="@style/MyTheme"
   />

В вашей деятельности измените фон окна обратно на null в onCreate()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setBackgroundDrawable(null);
    setContentView(R.layout.main);
}