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

Android, как не уничтожать активность при повороте устройства?

У меня есть приложение, которое работает только в портретном режиме, и я внес изменения в свой файл манифеста, чтобы каждое действие было ориентировано на портрет. Но когда я поворачиваю устройство, активность снова воссоздается. Как не уничтожить деятельность?

4b9b3361

Ответ 1

Для API 12 и ниже: добавьте

android:configChanges="orientation"

Добавьте "screenSize", если вы настроите таргетинг на API 13 или выше, потому что всякий раз, когда меняется ваша ориентация, размер вашего экрана, в противном случае новые устройства будут продолжать уничтожать вашу активность. См. Ниже приведенный ниже ответ "Яйцо" для получения дополнительной информации об использовании "screenSize"

android:configChanges="orientation|screenSize"

для вашей деятельности в AndroidManifest.xml. Таким образом, ваша деятельность не будет перезапущена автоматически. Смотрите документацию для получения дополнительной информации

Ответ 2

Из официального документа flurin сказал:

Примечание. Если ваше приложение нацелено на уровень API 13 или выше (как указано с помощью атрибутов minSdkVersion и targetSdkVersion), тогда вы должны также объявить конфигурацию "screenSize", поскольку она также изменяет когда устройство переключается между портретной и альбомной ориентацией.

Итак, если ваше приложение нацелено на уровень API 13 или выше, вы должны установить этот вариант:

android:configChanges="orientation|screenSize"

Ответ 3

Правильное решение

android:configChanges="orientation|screenSize"

Документация по Android:

Текущий доступный размер экрана изменился. Это представляет изменение доступного в настоящее время размера относительно текущего соотношения сторон, поэтому оно изменится, когда пользователь переключается между альбомным и портретным. Однако, если ваше приложение предназначено для уровня API 12 или ниже, то ваша активность всегда сама обрабатывает это изменение конфигурации (это изменение конфигурации не перезапускает вашу активность, даже при работе на устройстве Android 3.2 или выше). *

Ответ 4

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
                  android:configChanges="orientation|screenSize|keyboardHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity> 
</application> 

Ответ 5

Теперь, когда Android поддерживает разделенный экран ("многооконное" на языке Android), вы, вероятно, захотите добавить ориентацию screenSize | smalllestScreenSize | screenLayout |. Так что для управления вращением и разделением экрана вам понадобится что-то подобное в Android: configChanges

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
                  android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity> 
</application>

Ответ 7

записать в манифест:

android:configChanges="orientation|screenSize|keyboardHidden"

и переопределите это в действии, который решил вашу проблему:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
}