Ориентация на Android VideoView, например приложение Youtube

Я пытаюсь воспроизвести в своем приложении то, что делает приложение Youtube при воспроизведении видео.

Портретный режим: Показывает видео, используя только 40% экрана, а остальные - информацию о видео.

Ландшафтный режим: Показывает видео и окно в полноэкранном режиме.

Я видел много потоков в переполнении стека и других форумах по этому вопросу, но никто из них, похоже, не работает со мной. В настоящее время у меня есть моя активность в videoplayer с android: configChanges = "keyboardHidden | orientation | screenSize", и я переопределил событие onConfigurationChanged со следующим кодом:

@Override
public void onConfigurationChanged(Configuration config)
{
 super.onConfigurationChanged(config);
 if (config.orientation == Configuration.ORIENTATION_LANDSCAPE)
 {
 // requestWindowFeature(Window.FEATURE_NO_TITLE);
 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 }
 else
 {
 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
 }
}

Это не помещает приложение в полноэкранный режим, и если я раскомментирую его, то он будет аварийно завершен, потому что перед добавлением контента необходимо вызвать функцию requestFeature(). Позже я попытался удалить событие onConfigurationChanged и событие onCreate, которое я пробовал:

@Override
public void onCreate(Bundle savedInstanceState)
{
 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
 {
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 }
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_video);

Но сбой с NullPointerException в com.android.internal.policy.impl.PhoneWindow $PanelFeatureState.onRestoreInstanceState(PhoneWindow.java:3527), если я начну работу на портрете, а затем перевернусь на пейзаж. Любые предложения?

1 ответ

Чтобы поместить его в полноэкранный режим:

video_layout.xml:

Активность:

@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 }
 @Override
 public void onConfigurationChanged(Configuration newConfig) {
 super.onConfigurationChanged(newConfig);
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 }

И для поддержки изменений ориентации, таких как приложение youtube: Включение полноэкранного режима и ориентации, например YouTube.

licensed under cc by-sa 3.0 with attribution.