Android, как не уничтожить активность при повороте устройства? - PullRequest
79 голосов
/ 25 июля 2010

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

Ответы [ 6 ]

125 голосов
/ 25 июля 2010

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

android:configChanges="orientation"

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

android:configChanges="orientation|screenSize"

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

107 голосов
/ 14 июля 2012

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

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

Поэтому, если ваше приложение предназначено для уровня API 13 или выше, вы должны установить эту конфигурацию вместо:

android:configChanges="orientation|screenSize"

9 голосов
/ 05 июня 2014

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

android: configChanges = "direction | screenSize"

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

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

5 голосов
/ 10 февраля 2018

Я немного испортил это, а затем переделал, что в файле манифеста я помещал 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> 
0 голосов
/ 04 февраля 2016

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

android:configChanges="orientation|screenSize|keyboardHidden"

и переопределите это в деятельности, которая решила вашу проблему:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
}
0 голосов
/ 26 июля 2010

Посмотрите на этот код в плавающем изображении.У него самый интересный способ управления поворотом экрана.http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation

...