Я хочу создать флажок в своем предпочтении Activity, который позволяет пользователю переключать изменения ориентации.
В подобных вопросах люди пишут только о полной блокировке ориентации (путем переопределения метода onConfigurationChanged или добавления configChanges в AndroidManifest.xml) или принудительной ориентации (посредством setRequestedOrientation).
Есть ли способ включить блокировку ориентации?
EDIT:
Я создал метод, который устанавливает предпочтительную ориентацию для одного из трех состояний: ландшафт, портрет и сенсор. Этот метод используется в сочетании с восстановлением ориентации getResources().getConfiguration().orientation)
и сохранением восстановленной ориентации в настройках. Затем в деятельности, которая должна заблокировать ориентацию, я запускаю этот метод с предпочтительной ориентацией из предпочтений.
private static void setActivityOrientation(Activity activity, int preferenceOrientation) {
if (preferenceOrientation == Configuration.ORIENTATION_LANDSCAPE) {
if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
// You need to check if your desired orientation isn't already set because setting orientation restarts your Activity which takes long
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (preferenceOrientation == Configuration.ORIENTATION_PORTRAIT) {
if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
} else {
if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
}