Как переключиться, ориентация привязывают андроид?

Я хочу создать флажок в своем предпочтительном Действии, которое позволяет пользователю переключать изменение ориентации.

У подобных людей вопросов, только для записи о полной блокировке ориентации (путем переопределения 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);
        }
    }
}
14
задан pixel 8 November 2010 в 19:00
поделиться

1 ответ

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

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

if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
5
ответ дан 1 December 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: