Программно включить / отключить поворот экрана в Android - PullRequest
12 голосов
/ 06 августа 2010

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

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

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

 android:screenOrientation="portrait"

в манифесте.*

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

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

Ответы [ 2 ]

18 голосов
/ 06 августа 2010

Я бы сделал это, если бы моя страница настроек записывалась в 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 идругой без.Когда вы загружаете свою активность / вид, вы можете динамически загружать одну или другую на основе ваших сохраненных предпочтений.Это противно не чисто, но должно работать.

1 голос
/ 13 августа 2015

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

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
...