Установка альбомной ориентации без блокировки ориентации датчика
Я работаю над приложением, которое имеет встроенный видеоплеер. Мне нужно воспроизвести полноэкранное поведение 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 ответа:
Привет из футуристического 2016 года.
Жизненные пути вернули меня к этому же затруднительному положению в другом приложении для Android, и я обнаружил, что реальный ответ на эту проблему состоял в том, чтобы просто добавить это...setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
...сразу после установки ориентации на нужную настройку.
Здесь лежит мой собственный предыдущий ответ
Из-за отсутствия ответов и потому, что я не был в состоянии решить эту проблему в элегантный способ, которым я, наконец, закончил пользоваться OrientationListener, чтобы получить необработанные Градусы устройства.
С этим я смог освободить конфигурацию ориентации пользователя после того, как устройство было позиционировано как фактический макет.
Если кто-то заинтересован в получении дополнительной информации об этом, просто позвольте мне знать.
Попробуйте это..
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Или в вашем манифесте
<activity android:name="Activity" android:screenOrientation="landscape" />