Как заблокирована ориентация приложения (пейзаж или портрет)?
Я попытался заморозить ориентацию, используя:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Хотя дисплей остается в портретной ориентации, активность все еще воссоздается. Любые идеи, как это решить?
Как можно заблокировать ориентацию приложения, чтобы активность не воссоздавалась при изменении ориентации?
Ответы
Ответ 1
Во-первых, не используйте setRequestedOrientation()
, если вы можете избежать этого. Вместо этого используйте атрибут android:screenOrientation
в манифесте <activity>
.
Во-вторых, вам понадобится android:configChanges="keyboardHidden|orientation"
в вашем манифесте <activity>
, чтобы предотвратить цикл destroy/recreate.
Ответ 2
Более конкретный пример раздела активности AndroidManifest.xml для портретной ориентации:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Где android:screenOrientation
устанавливает начальную ориентацию, а android:configChanges
удаляет события, которые запускают соответствующие методы жизненного цикла на экране.
Ответ 3
Попробуйте следующее:
1.- Установите желаемую ориентацию экрана в вашем AndroidManifest.xml
android:screenOrientation="portrait|landscape"
Он должен выглядеть так:
<application
android:allowBackup="true"
android:icon="~icon path~"
android:label="~name~"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
</application>
2.- Добавьте это в свой onCreate void (или где хотите) в свой файл активности java (например: "MainActivity.java" ):
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
Он должен выглядеть так:
protected void onCreate(Bundle savedInstanceState) {
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);}
Теперь экран не будет перемещаться, даже если на устройстве включено "Вращение экрана".
Ответ 4
Лучшим решением является использование сохраненного экземпляра.
Если вы блокируете ориентацию экрана, это означает, что вы вынуждаете пользователя использовать приложение в соответствии с установленными вами ограничениями. Поэтому всегда используйте onSaveInstanceState. Прочтите эту ссылку: http://developer.android.com/training/basics/activity-lifecycle/recreating.html