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

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

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

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

Я видел много тем на переполнении стека и других форумах по этой теме, но ни одна из них, похоже, не работает со мной. В настоящее время у меня есть активность видеоплеера с 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);

    }
}

Это не переводит приложение в полноэкранный режим, и если я раскомментирую функцию requestwindowfeature, произойдет сбой, потому что «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:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView
    android:id="@+id/video"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true" />

Activity:

  @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

person Andy    schedule 13.08.2015