Программное включение/отключение поворота экрана в Android

У меня есть приложение, которое отображает большой объем текста для чтения пользователем.

Я обнаружил, что, читая при лежании, меня раздражает, что экран вращается, хотя моя голова и экран выровнены.

Я не хочу, чтобы это было постоянно в портретном режиме, поэтому я думаю, что это исключает возможность установки

 android:screenOrientation="portrait"

в манифесте.

В идеале я хотел бы включить/отключить автоматические изменения ориентации с помощью страницы предпочтений.

Каким будет мой лучший подход?

Ответы

Ответ 1

Я бы сделал это, указав мою страницу предпочтений на SharedPreferences для моего приложения, затем прочитав это значение и позвонив Activity.setRequestedOrientation() из кода при загрузке или отображении текстового представления.

Например:

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if (prefs.getBoolean("fix_orientation_to_portrait", false)) {
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else {
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    }

Это может быть как метод onCreate(), так и onResume(). Единственная причина не иметь его в методе onCreate() заключается в том, что изменение этого параметра происходит в этой активности или в дочерней активности, которая вернется к этому, когда это будет сделано.

Edit:

ОК, если это не сработает (и я не уверен, что это будет), возможно, вы можете попробовать иметь два разных XML файла раскладки - один с набором screenOrientation, а другой без него. Когда вы загружаете свой Activity/View, вы можете динамически загружать тот или иной на основе сохраненных настроек. Он противный не чист, но он должен работать.

Ответ 2

Добавить эту строку внутри функции onCreate(). Он работает...

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);