У мене є програма, яка працює лише в портретному режимі, і я вніс зміни у свій файл маніфесту для кожної діяльності, орієнтація якої має бути портретною. Але коли я обертаю пристрій, активність відтворюється знову. Як не знищити діяльність?
У мене є програма, яка працює лише в портретному режимі, і я вніс зміни у свій файл маніфесту для кожної діяльності, орієнтація якої має бути портретною. Але коли я обертаю пристрій, активність відтворюється знову. Як не знищити діяльність?
Відповіді:
Для API 12 і нижче : додати
android:configChanges="orientation"
Додайте "screenSize", якщо ви націлюєтеся на API 13 або новішої версії, тому що, коли орієнтація змінюється, змінюється і розмір екрана, інакше нові пристрої продовжуватимуть руйнувати вашу активність. Докладнішу інформацію про використання "screenSize" див. У відповіді Egg нижче
android:configChanges="orientation|screenSize"
до Вашої активності в AndroidManifest.xml. Таким чином Ваша активність не буде перезапущена автоматично. Дивіться документацію для більш докладної інформації
З офіційного документа Флурін сказано:
Примітка: Якщо ваша програма націлена на рівень API 13 або вище (як заявлено атрибутами minSdkVersion та targetSdkVersion), вам слід також оголосити конфігурацію "screenSize", оскільки вона також змінюється, коли пристрій перемикається між портретною та альбомною орієнтацією.
Отже, якщо ваш додаток націлений на рівень API 13 або вище, замість цього слід встановити цю конфігурацію:
android:configChanges="orientation|screenSize"
Правильним рішенням є
android:configChanges="orientation|screenSize"
Документація для Android:
Поточний доступний розмір екрана змінився. Це являє собою зміну доступного на даний момент розміру щодо поточного співвідношення сторін, тому буде змінюватися, коли користувач перемикається між альбомною та книжковою. Однак, якщо ваша програма націлена на рівень API 12 або нижче, ваша діяльність завжди сама обробляє цю зміну конфігурації (ця зміна конфігурації не перезапускає вашу активність, навіть коли вона працює на пристрої Android 3.2 або новішої версії). *
Я трохи зіпсував це, а потім зрозумів, що всередині файлу маніфесту я розміщую 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>
Тепер, коли Android підтримує розділений екран ("багатовіконний" мовою Android), ви, ймовірно, захочете також додати орієнтацію screenSize | najmanшийScreenSize | 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>
Подивіться на цей код у плаваючому зображенні. Це найцікавіший спосіб обробки обертання екрану за всю історію.http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation
напишіть у маніфесті:
android:configChanges="orientation|screenSize|keyboardHidden"
і перевизначити це в діяльності, яка вирішила вашу проблему:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}