Как избежать перезапуска активности при изменении ориентации на Android

Я создаю Android-приложение, в котором я рисую представление на холсте. Когда ориентация устройства изменяется, активность перезапускается. Я не хочу этого.

Как избежать перезапуска активности при изменении ориентации?

Ответ 1

Существуют различные способы сделать это, но как указано здесь, используя

android:configChanges="keyboardHidden|orientation|screenSize"

как вам нужно, позволяет вместо этого прослушивать изменения конфигурации. Затем вы отвечаете на эти изменения, переопределяя onConfigurationChanged и вызывая setContentView.

Так я и делал это, но мне было бы интересно узнать мысли других людей.

Ответ 2

Определите свою активность в 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>

Ответ 3

Проверьте свой файл манифеста Android, который вы написали android:configChanges="orientation" в действии.

Ответ 4

Добавьте android:configChanges="keyboardHidden|orientation" в свой activity

Ответ 5

Я пытался написать android:configChanges="keyboardHidden|orientation|screenSize" в тег активности, но не работает.

Я перепробовал много методов, но ничего не работает, пока я не добавил android:configChanges="keyboardHidden|orientation|screenSize" для всех действий приложения, и он работает отлично.

Ответ 6

Я бы рекомендовал использовать фрагменты. Вы можете просто использовать setRetainInstance(true) для уведомления о том, что вы хотите сохранить свой фрагмент.

Ответ 7

Для пользователей 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
        }
    }

Ответ 8

Добавьте это ко всем вашим действиям в манифесте.

android:configChanges="orientation|screenSize"

Пример:

<activity android:name=".activity.ViewActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|screenSize"/>

Ответ 10

просто добавьте android: configChanges = "keyboardHidden | orientation | screenSize" для всех действий приложения в файле манифеста

Ответ 11

Объявите об этом в вашем AndroidManifest.xml

<activity android:name=".complex_examples.VideoPlayerActivity"
            android:configChanges="keyboard|keyboardHidden|orientation
                                  |screenSize|screenLayout|smallestScreenSize|uiMode"
            android:launchMode="singleTop"/>

Но будьте осторожны, в документации для разработчиков Android сказано, что вы должны делать это только в том случае, если не осталось лучших вариантов.

Примечание. Следует избегать использования этого атрибута и использовать его только в качестве крайней меры. Пожалуйста, прочитайте Обработка изменений времени выполнения для получения дополнительной информации о том, как правильно обрабатывать перезапуск из-за изменения конфигурации.

Если вы уверены в этом, вы можете самостоятельно обрабатывать изменения конфигурации в методе onConfigurationChanged().