23

ViewPager と FragmentPagerAdapter を 3 つのフラグメントを持つ 1 つのアクティビティに設定しました。すべてのフラグメントが同時にロードされ、次を使用してメモリに保持されます

mPager.setOffscreenPageLimit(2);

これらのフラグメントの 1 つは、ステータス バーやアクション バーのない全画面表示にしたいカメラ プレビューをホストします。他のフラグメントでは、アクション バーを表示する必要があります。

他の 2 つのフラグメントを正常に保ちながら、カメラ プレビュー フラグメントのみを全画面表示にするにはどうすればよいですか? アクションバーを壊すことを意味するテーマを使用してみました。

プログラムで以下を呼び出すことは役に立ちません。アクティビティ全体が強制的に全画面表示になるためです (したがって、他の 2 つのフラグメントも一緒に表示されます)。

requestWindowFeature(Window.FEATURE_NO_TITLE); 
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);

ViewPager.OnPageChangeListener も実装してみました:

public void onPageSelected(int position) {
    if(position == 1)
        getActionBar().hide();
    else
        getActionBar().show();
}

これによりアクション バーは非表示になりますが、システム ステータス バーは非表示になりません (通知、ステータス アイコン、時間の場所について話しているのです)。アクション バーの非表示/表示アニメーションも、スワイプすると非常に途切れ途切れになります。

私が正確にやりたいことの例については、Snapchat を参照してください。Snapchat は、カメラと他のフラグメントの間のスワイプを完全にやってのけることができます。

編集:

だから私は onPageSelected をこれに変更しました:

public void onPageSelected(int position) {
    if(position == 1) {
        MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    } else {
        MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    }
}

これにより、ステータスバーを表示するかどうかを変更できます。ただし、大量のジャンクが発生します。アクションバーと同じ問題。

タブの変更が完了すると、Snapchat でステータス バーが上下にスライドすることに気付きました。これを実装する方法がわからないので、この点に関するアドバイスをいただければ幸いです。

4

3 に答える 3