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

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

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

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

android:screenOrientation="portrait" 

В манифесте.

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

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

Solutions Collecting From Web of "Программное включение / отключение поворотов экрана в Android"

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

Редактировать:

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

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

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);