Я хочу создать флажок в своем предпочтительном Действии, которое позволяет пользователю переключать изменение ориентации.
У подобных людей вопросов, только для записи о полной блокировке ориентации (путем переопределения onConfigurationChanged метода или добавления configChanges в AndroidManifest.xml) или осуществление ориентации (setRequestedOrientation).
Существует ли способ переключить блокировку ориентации?
Править: Я создал метод, который устанавливает предпочтительную ориентацию на одно из трех состояний: среда, портрет и датчик. Этот метод используется в сочетании с получением ориентации 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);
}
}
}
Я не понимаю, в чем проблема с setRequestedOrientation.
Комбинация SCREEN_ORIENTATION_SENSOR с альбомной или портретной ориентацией кажется тем, что вы хотите, нет?
if(....)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else if(....)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(....)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);