Установка альбомной ориентации без блокировки ориентации датчика


Я работаю над приложением, которое имеет встроенный видеоплеер. Мне нужно воспроизвести полноэкранное поведение Youtube.

Когда пользователь переходит к ландшафтному вращению устройства, я ловлю его через onConfigurationChanged и делаю соответствующие изменения макета.

Однако у меня также есть кнопка для установки полноэкранного режима. Мне нужна эта кнопка, чтобы перейти на landscpe (ergo, полноэкранный режим), но не блокируйте изменение ориентации через датчик.

Вот что я сейчас делаю на onConfigurationChanged:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (this.isLandscape(newConfig.orientation)){
        this.goToFullScreenMode();
    }else{
        this.goToInlineMode();
    }
}

И вот что я делаю в кнопке, но терплю неудачу, потому что она блокирует активность в ландшафте:

this.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

Что мне нужно, так это перейти в ландшафтный режим, но позволить пользователю переключиться обратно на портрет с помощью датчика, как это делает Youtube.

Я могу сделать это, просто зафиксировав альбомную ориентацию до тех пор, пока устройство не станет горизонтальным (считывая данные непосредственно с датчика), а затем снова разблокировать ориентацию. Я не думаю, что это самый "правильный" способ оно.

4 3

4 ответа:

Привет из футуристического 2016 года.

Жизненные пути вернули меня к этому же затруднительному положению в другом приложении для Android, и я обнаружил, что реальный ответ на эту проблему состоял в том, чтобы просто добавить это...
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

...сразу после установки ориентации на нужную настройку.


Здесь лежит мой собственный предыдущий ответ

Из-за отсутствия ответов и потому, что я не был в состоянии решить эту проблему в элегантный способ, которым я, наконец, закончил пользоваться OrientationListener, чтобы получить необработанные Градусы устройства.

С этим я смог освободить конфигурацию ориентации пользователя после того, как устройство было позиционировано как фактический макет.

Если кто-то заинтересован в получении дополнительной информации об этом, просто позвольте мне знать.

Попробуйте это..

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Или в вашем манифесте

 <activity
        android:name="Activity"    
        android:screenOrientation="landscape"    />

Создать layout-land каталог в res и поместите альбомную версию вашего XML-файла макета в этот каталог.

Или же поместите эту строку в тег activity в файле манифеста

Android: screenOrientation= "пейзаж";

Поместите это в Ur манифест для вашей соответствующей деятельности

<activity
    android:name="YourActivityName goes here"    
    android:screenOrientation="landscape"    />