Как включить блокировку ориентации в Android? - PullRequest
14 голосов
/ 14 мая 2010

Я хочу создать флажок в своем предпочтении 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);
        }
    }
}

1 Ответ

5 голосов
/ 14 мая 2010

Я не понимаю, в чем проблема с setRequestedOrientation.

Комбинация SCREEN_ORIENTATION_SENSOR для пейзажа или портрета кажется тем, что вы хотите, нет?

if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
...