written: 2014-06-24 .. 2014-09-24

Android プログラミング - 没入モードとオーバーフローメニューの共存

Android Programming - Managing both Immersive mode & Overflow menu

Android も 4.x でコツコツと進化してきていますが、中でも 4.4 (KitKat) は比較的、マイナーバージョンアップとしては大きめの変化があったと思います。没入モードもその一つですね。

It seems like it was relatively a big step as a minor version up in Android 4.4 (KitKat). One of those changes is the "immersive mode" feature.

没入モードにした場合、アクションバーのオーバーフローメニューをボタンを押して表示すると、没入モードがキャンセルされて元の状態に戻ってしまうという問題があります。Y.A.M の雑記帳および StackOverFlow でも話題にされています。

While the immersive mode is enabled, if you push overflow menu button and popup the menu, the immersive mode will be canceled. About this problem there is a post at StackOverFlow.

解決方法

Solution

Android Developers の 公式チュートリアル のサンプルにあるように、onWindowFocusChanged() で没入モードを有効化すれば ok です。

Like the sample code in Official Tutorial at Android Developer, enabling immersive mode inside onWindowFocusChanged() is the solution.


@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    
    if (hasFocus) {
        decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

Android