Я создаю Android-приложение, в котором я рисую представление на холсте. Когда ориентация устройства изменяется, активность перезапускается. Я не хочу этого.
Как избежать перезапуска активности при изменении ориентации?
Я создаю Android-приложение, в котором я рисую представление на холсте. Когда ориентация устройства изменяется, активность перезапускается. Я не хочу этого.
Как избежать перезапуска активности при изменении ориентации?
Существуют различные способы сделать это, но как указано здесь, используя
android:configChanges="keyboardHidden|orientation|screenSize"
как вам нужно, позволяет вместо этого прослушивать изменения конфигурации. Затем вы отвечаете на эти изменения, переопределяя onConfigurationChanged
и вызывая setContentView
.
Так я и делал это, но мне было бы интересно узнать мысли других людей.
Определите свою активность в AndroidManifest.xml следующим образом:
<activity
android:name="com.name.SampleActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:icon="@drawable/sample_icon"
android:label="@string/sample_title"
android:screenOrientation="portrait" >
</activity>
Проверьте свой файл манифеста Android, который вы написали android:configChanges="orientation"
в действии.
Добавьте android:configChanges="keyboardHidden|orientation"
в свой activity
Я пытался написать android:configChanges="keyboardHidden|orientation|screenSize"
в тег активности, но не работает.
Я перепробовал много методов, но ничего не работает, пока я не добавил android:configChanges="keyboardHidden|orientation|screenSize"
для всех действий приложения, и он работает отлично.
Я бы рекомендовал использовать фрагменты. Вы можете просто использовать setRetainInstance(true)
для уведомления о том, что вы хотите сохранить свой фрагмент.
Для пользователей xamarin
,
Чтобы избежать перезапуска приложения при изменении ориентации в Android, добавьте это
ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
Атрибут Activity всех классов Activity. Например, ниже мой демонстрационный код
[Activity(Label = "DemoApp", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
protected override void OnCreate(Bundle bundle)
{
//Some code here
}
}
Добавьте это ко всем вашим действиям в манифесте.
android:configChanges="orientation|screenSize"
Пример:
<activity android:name=".activity.ViewActivity"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"/>
Чтобы избежать перезапуска на keyboardHidden|orientation
- Как отключить изменение ориентации в Android?
Пожалуйста, следуйте руководству Android API - Обработка изменений времени выполнения
Использование класса приложения - Перезагрузка активности при ротации Android
просто добавьте android: configChanges = "keyboardHidden | orientation | screenSize" для всех действий приложения в файле манифеста
Объявите об этом в вашем AndroidManifest.xml
<activity android:name=".complex_examples.VideoPlayerActivity"
android:configChanges="keyboard|keyboardHidden|orientation
|screenSize|screenLayout|smallestScreenSize|uiMode"
android:launchMode="singleTop"/>
Но будьте осторожны, в документации для разработчиков Android сказано, что вы должны делать это только в том случае, если не осталось лучших вариантов.
Примечание. Следует избегать использования этого атрибута и использовать его только в качестве крайней меры. Пожалуйста, прочитайте Обработка изменений времени выполнения для получения дополнительной информации о том, как правильно обрабатывать перезапуск из-за изменения конфигурации.
Если вы уверены в этом, вы можете самостоятельно обрабатывать изменения конфигурации в методе onConfigurationChanged().