溢出菜单单击禁用沉浸模式 - Android 4.4 Kitkat

Jai*_*oks 7 android android-fullscreen android-4.4-kitkat

任何人都知道这是一个Bug还是应该这样做.在使用KitKat的沉浸式模式时单击"溢出"图标时,它会禁用沉浸式模式.遇到其他人?

谷歌的完整代码 - 在这里

public void toggleHideyBar() {

    // The UI options currently enabled are represented by a bitfield.
    // getSystemUiVisibility() gives us that bitfield.
    int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();
    int newUiOptions = uiOptions;
    boolean isImmersiveModeEnabled =
            ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
    if (isImmersiveModeEnabled) {
        Log.i(TAG, "Turning immersive mode mode off. ");
    } else {
        Log.i(TAG, "Turning immersive mode mode on.");
    }

    // Navigation bar hiding:  Backwards compatible to ICS.
    if (Build.VERSION.SDK_INT >= 14) {
        newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    }

    // Status bar hiding: Backwards compatible to Jellybean
    if (Build.VERSION.SDK_INT >= 16) {
        newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;
    }

    // Immersive mode: Backward compatible to KitKat.
    // Note that this flag doesn't do anything by itself, it only augments the behavior
    // of HIDE_NAVIGATION and FLAG_FULLSCREEN.  For the purposes of this sample
    // all three flags are being toggled together.
    // Note that there are two immersive mode UI flags, one of which is referred to as "sticky".
    // Sticky immersive mode differs in that it makes the navigation and status bars
    // semi-transparent, and the UI flag does not get cleared when the user interacts with
    // the screen.
    if (Build.VERSION.SDK_INT >= 18) {
        newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    }

    getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
}
Run Code Online (Sandbox Code Playgroud)

小智 3

在 K 中,溢出菜单是一个获得焦点的单独窗口,因此驱动当前系统 UI 标志。

但是,只有当您尝试在状态栏隐藏时显示操作栏时,才会出现这种情况,这是不鼓励的。对于操作栏之外的上下文菜单,您可以使用PopupWindow代替(PopupWindow您可以根据需要自行设置系统 UI 标志)。