Как избежать возобновления активности при изменении ориентации на Android - PullRequest
55 голосов
/ 31 декабря 2010

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

Как я могу избежать перезапуска упражнения, когда меняется ориентация?

Ответы [ 11 ]

81 голосов
/ 08 февраля 2013

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

android:configChanges="keyboardHidden|orientation|screenSize"

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

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

15 голосов
/ 10 сентября 2014

Определите свою активность в 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>
11 голосов
/ 31 декабря 2010

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

7 голосов
/ 18 декабря 2016

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

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

7 голосов
/ 08 февраля 2013

Добавьте android:configChanges="keyboardHidden|orientation" к вашему activity

6 голосов
/ 09 июня 2016

Для 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
        }
    }
6 голосов
/ 08 декабря 2012

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

3 голосов
/ 18 марта 2017

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

android:configChanges="orientation|screenSize"

Пример:

<activity android:name=".activity.ViewActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|screenSize"/>
2 голосов
/ 08 декабря 2012

Чтобы избежать перезапуска на keyboardHidden|orientation - Как отключить изменение ориентации в Android?
Пожалуйста, следуйте руководству по API Android - Обработка изменений времени выполнения
Использование класса приложения - Перезапуск активности при ротации Android

0 голосов
/ 17 июля 2018

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

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

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

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

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

...