4

ビデオを再生するときに Youtube アプリが行うことを自分のアプリで複製しようとしています。

縦向きモード:画面の 40% のみを使用してビデオを表示し、残りの部分にはビデオに関する情報を表示します。

横モード:ビデオとウィンドウをフルスクリーン モードで表示します。

スタック オーバーフローやこのテーマに関する他のフォーラムで多くのスレッドを見てきましたが、どれも私とはうまくいかないようです。現在、私は android:configChanges="keyboardHidden|orientation|screenSize" で videoplayeractivity を持っており、次のコードで 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);

しかし、ポートレートでアクティビティを開始してからランドスケープに切り替えると、com.android.internal.policy.impl.PhoneWindow$PanelFeatureState.onRestoreInstanceState(PhoneWindow.java:3527) で NullPointerException でクラッシュします。助言がありますか?

4

1 に答える 1

-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" />

アクティビティ:

  @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 のようにフルスクリーンと向きを切り替える

于 2015-08-13T18:06:52.450 に答える