2

私はどこでも検索してきましたが、それについて途方に暮れています。プロジェクトで没入モードをアクティブにしようとしています。ステータスバーの背景が常にそこにとどまり、没入感を台無しにすることを除いて、ほとんどすべてが正常に機能します...没入モードをアクティブにする前後の画面のスクリーンショットを含め、最大のコントラストのために「colorPrimaryDark」を完全な緑に設定しました: 何も表示されない場合のステータス バーの背景を示すスクリーンショット この問題を特定するために使用し、空のプロジェクトに再挿入したコードは、私の MainActivity にある Google 開発者の例から直接取得したものです。

private final String TAG = "DEBUG::" + this.getClass().getSimpleName();
private final int INITIAL_HIDE_DELAY = 1500;
private View decorView;
private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //setting needed decorView for fullscreen behavior
    decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener(onSystemUiVisibilityChangeListener);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.i(TAG, "onWindowFocusChanged::hasFocus = " + hasFocus);
    if (hasFocus) {// When the window gains focus, hide the system UI.
        delayedHide(INITIAL_HIDE_DELAY);
    } else {// When the window loses focus, cancel any pending hide action.
        mHideHandler.removeMessages(0);
    }
}

private void hideSystemUI() {
    Log.i(TAG, "hideSystemUI");
    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
    uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
    uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN;
    uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
    uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE;
    decorView.setSystemUiVisibility(uiOptions);
}
private final Handler mHideHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        hideSystemUI();
    }
};

private void delayedHide(int delayMillis) {
    Log.i(TAG, "delayedHide");
    mHideHandler.removeMessages(0);
    mHideHandler.sendEmptyMessageDelayed(0, delayMillis);
}

private View.OnSystemUiVisibilityChangeListener onSystemUiVisibilityChangeListener =
        new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    // The system bars are visible
                    getSupportActionBar().show();
                    delayedHide(INITIAL_HIDE_DELAY);
                } else {
                    // The system bars are NOT visible
                    getSupportActionBar().hide();
                }
            }
        };

私の問題はレイアウト ファイルまたはスタイル ファイルに起因するのだろうかと思いますが、それらはプロジェクト生成によるものです...誰かが私が失敗した場所を指摘してくれることを願っています! 前もって感謝します!

編集:アクティビティのレイアウト ファイルから : を削除android:fitsSystemWindows="true"すると、実際のフルスクリーン モードが可能になることがわかりましたが、表示時に ActionBar の一部が StatusBar の後ろに隠れています。に設定するとgetSupportActionBar().show();onSystemUiVisibilityChangeListener描画が早すぎるのでしょうか?

編集2:これまでのところ、コンテンツの位置/サイズ(アクションバーを含む)に関して2つの選択肢しかないことを理解している:
画面の上部、ステータスバーによって部分的に隠されているアクションバーを表示する
か、ステータスバーの下これにより、statusBar が非表示のときに「穴」が残ります-_-メソッド
内で自分で ActionBar を画面外/画面上でアニメーション化するソリューションを探していますが、onSystemUiVisibilityChangeListener方法が見つかりませんそのビューを取得するには、そこに投稿されたソリューションhttps://stackoverflow.com/a/21125631/6463888が古くなっているようです...

4

3 に答える 3

0

こんにちは、あなたの問題は StatusBar の性質が原因です。メイン コンテンツとは別のレイアウトがあり、その色を手動で設定する必要があります。たとえば、 onSystemUiVisibilityChange() を呼び出すと、背景の色を取得して、その色で StatusBar の色を設定できます。これは、2 つの異なる背景色を避けるための回避策です。

于 2016-06-14T10:47:01.237 に答える