2013-12-12 4 views
3

Я работаю над приложением, имеющим встроенный видеоплеер. Мне нужно воспроизвести полноэкранное поведение 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.

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

ответ

3

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

Пути жизни вернуло меня к этому же затруднительном положении на другом Android приложения, и я узнал, что реальный ответ на проблемы в том, чтобы просто добавить этот ...

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

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


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

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

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

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

+1

В моей среде предлагаемое решение не сработало. Как только я вызываю setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED), изменение устройства (что нежелательно), поэтому мне нужно было использовать OrientationEventListener https://developer.android.com/reference/android/view/OrientationEventListener.html#onOrientationChanged(int) – Kazuki

0

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

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

андроид: screenOrientation = «пейзаж»;

+0

Это не исправить мою проблему. Я уже управляю разностями макетов. Мне нужно изменить ориентацию на Пейзаж, не блокируя его в Пейзаже. – CapitanNerd

1

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

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

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

Это заблокирует действие только в ландшафте. Мне нужно изменить ориентацию на Пейзаж, не блокируя его в Пейзаже. – CapitanNerd

0

Put это в ур Manifest для соответствующей деятельности

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

Это заблокирует активность в ландшафте. Мне нужно изменить ориентацию на Пейзаж, не блокируя его в Пейзаже. – CapitanNerd

Смежные вопросы