7

これがバグなのか、これを行うべきなのか、誰でも知っています。KitKat の没入モードの使用中にオーバーフロー アイコンをクリックすると、没入モードが無効になります。他の誰かがこれに遭遇していますか?

Google による完全なコード -こちら

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);
}
4

4 に答える 4

3

K では、オーバーフロー メニューはフォーカスを取得する別のウィンドウであるため、現在のシステム UI フラグを駆動します。

ただし、これは、ステータス バーが非表示のときにアクション バーを表示しようとした場合にのみ表示されるため、お勧めできません。アクション バーの外側のコンテキスト メニューについては、代わりにPopupWindowPopupWindowを使用できます (必要に応じてシステム UI フラグを自分で設定できます)。

于 2013-12-17T16:44:08.050 に答える
2

PopupWindow のシステム UI フラグを設定する方法がわかりません。私はこのようなことを試しました:

PopupMenu popupMenu = new PopupMenu(mainHandle, view) {
   @Override
   public void show() {
       getWindow().getDecorView().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);
       super.show();
}
于 2015-04-24T22:16:49.437 に答える