ビデオを再生するときに 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 でクラッシュします。助言がありますか?