Блокировка ориентации экрана (Android)

Возможный дубликат:
Как отключить изменение ориентации на Android?

Я пишу приложение для Android, которое использует вкладки с различным содержимым (действия). В одном из этих действий я хотел бы заблокировать ориентацию экрана до "Пейзаж" -мод, но в других действиях я хочу нормальную ориентацию (согласно датчику).

То, что я сейчас делаю, это то, что я звоню

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

когда я переключаюсь в режим ландшафтного режима и

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

когда я вернусь к другим действиям. Однако, похоже, это не работает, все приложение блокируется. Каков нормальный подход к этой проблеме?

Ответ 1

В манифесте вы можете установить для параметра ScreenOrientation значение "пейзаж". В XML это будет выглядеть примерно так:

<activity android:name="MyActivity"
android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation|screenSize">
...
</activity>

Где MyActivity - тот, который вы хотите остаться в ландшафте.

Строка android:configChanges=... предотвращает вызов onResume(), onPause() при повороте экрана. Без этой строки вращение будет оставаться по вашему запросу, но вызовы будут по-прежнему выполняться.

Примечание: keyboardHidden и orientation необходимы для < Android 3.2 (уровень API 13), и все три варианта требуются 3,2 или более, а не только orientation.

Ответ 2

У меня была аналогичная проблема.

Когда я ввел

<activity android:name="MyActivity" android:screenOrientation="landscape"></activity>

В манифестном файле это действие отображалось в ландшафте. Однако, когда я вернулся к предыдущим действиям, они отображались в lanscape, хотя они были настроены на портрет. Однако, добавив

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

сразу после того, как раздел OnCreate целевого действия разрешил проблему. Поэтому теперь я использую оба метода.

Ответ 3

внутри файла манифеста Android вашего проекта, найдите объявление активности, чье вы хотите исправить ориентацию и добавить следующий фрагмент кода,

android:screenOrientation="landscape"

для альбомной ориентации и для портрета добавьте следующий код,

android:screenOrientation="portrait"