Я работаю над приложением, имеющим встроенный видеоплеер. Мне нужно воспроизвести полноэкранное поведение Youtube.Установить ориентацию ландшафта без привязки датчика датчика
Когда пользователь переходит на пейзаж, поворачивая устройство, я улавлю его через onConfigurationChanged и сделаю соответствующие изменения макета.
Однако у меня также есть кнопка для установки полноэкранного режима. Мне нужна эта кнопка, чтобы перейти к landscpe (ergo, fullscreen), но не блокируйте изменение ориентации с помощью сенсора.
Вот что я сейчас делаю на 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.
Я могу сделать это, просто заблокировав пейзаж, пока устройство не будет горизонтально (читая непосредственно с датчика), а затем снова разблокируйте ориентацию. Я не думаю, что это самый «правильный» способ сделать это.
В моей среде предлагаемое решение не сработало. Как только я вызываю setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED), изменение устройства (что нежелательно), поэтому мне нужно было использовать OrientationEventListener https://developer.android.com/reference/android/view/OrientationEventListener.html#onOrientationChanged(int) – Kazuki