Сбой приложения в альбомной ориентации при отображении экрана загрузки

#java #android #xml #landscape

#java #Android #xml #альбомная

Вопрос:

Я отображаю начальную заставку, создав Splash_Screen класс и установив мой манифест следующим образом:

 <activity
    android:name=".MainActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<activity android:name=".Splash_Screen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

мой Splash_Screen класс выглядит следующим образом:

 public class Splash_Screen extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(getApplicationContext(), MainActivity.class));
            }
        }, 3000);
    }
}
  

Я создал файл макета по умолчанию для заставки:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Splash_Screen">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:src="@drawable/splash_default"/>

</RelativeLayout>
  

и после этого на панели предварительного просмотра я создал второй XML-файл, выбрав выпадающее меню «ориентация для предварительного просмотра» и выбрав «создать альбомную версию». В новом файле я заменил ImageView исходный файл. Моя структура макета выглядит следующим образом:

папка макета

Теперь, когда приложение отображает экран-заставку, а я нахожусь в альбомном режиме (независимо от того, запустил ли я этот способ или переключился на него из портретного режима), приложение завершает работу. Внутри приложения он не будет аварийно завершать работу в альбомном режиме.

Что я пропустил?

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

1. Просто помните, что при каждом повороте экрана действие воссоздается. Вы должны сохранить состояние своей активности. Я предполагаю, что ваше приложение выходит из строя в этой строке (startActivity (новое намерение (getApplicationContext(), MainActivity.class ));)?? Было бы неплохо, если бы мы увидели журнал.

2. Это не то, как вы должны создавать экран загрузки… Даже ради брендинга это ужасный подход. Это лучше bignerdranch.com/blog/splash-screens-the-right-way

3. @ZUNJAE Я согласен с вами, и я сделал это так, как описано там. Но как я могу установить разные изображения для разных размеров экрана / ориентации там?

4. developer.android.com/training/multiscreen/screendensities

5. @ZUNJAE Я вижу, как эта статья помогает при разных размерах экрана, поэтому я могу использовать изображения с разными разрешениями, но у меня также разные изображения для ориентации, и я не вижу подсказки для этого в этой статье. Было бы лучше заблокировать альбомный режим во время экрана загрузки (если это вообще возможно)?