Блокировка ориентации экрана (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"