Я хочу создать флажок в моей настройке "Активность", которая позволяет пользователю переключать ориентацию.
В подобных вопросах люди пишут только о полной блокировке ориентации (путем переопределения методаConfigurationChanged или добавления 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);
}
}
}