android中如何隐藏系统导航栏

问题描述 投票:0回答:4

我已遵循 Android 开发人员指南:如何隐藏系统导航栏。

int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

它工作正常,直到我显示一个 AlertDialog。 显示对话框时,导航栏(三个图标:正方形、三角形和圆形)将显示在应用程序控件的顶部。

android uinavigationbar navigationbar
4个回答
3
投票

注意:当您显示任何警报对话框时,系统导航仍然会出现,但当您关闭它时,它将再次隐藏。如果您仍然不希望出现此行为,请使用中心视图创建类似警报的视图。

您可以尝试以下我用过的方法。

/**
     * Hide system NavigationBar and StatusBar
     */
    @TargetApi(Build.VERSION_CODES.KITKAT)
    public void hideNavigationBar()
    {
        final View decorView = getWindow().getDecorView();
        decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                Log.i("LOG","Menu Shown is this"+ visibility);
                decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_IMMERSIVE);

            }
        });
    }

onResume
Activity
调用上述方法,并确保在活动中覆盖以下方法。

@Override
    @TargetApi(Build.VERSION_CODES.KITKAT)
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus)
        {
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_IMMERSIVE
                            );
        }
    }

创建警报时,您应该使用以下方法隐藏导航。

public static void showAlert(Context context,String title,String message) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
        alertDialogBuilder.setTitle(title);
        alertDialogBuilder.setMessage(message);
        alertDialogBuilder.setCancelable(false);
        alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
       final AlertDialog alertDialog = alertDialogBuilder.create();
        //Here's the magic..
//Set the dialog to not focusable (makes navigation ignore us adding the window)
        alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

        alertDialog.show();
        //Set the dialog to immersive
        alertDialog.getWindow().getDecorView().setSystemUiVisibility(
                ((Activity)context).getWindow().getDecorView().getSystemUiVisibility());

//Clear the not focusable flag from the window
       alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
    }

我从中找到了上面的工作代码SO


0
投票

尝试查看那里有官方文档


0
投票

使用这些方法来显示/隐藏

systemUI

  public void hideUI() {
     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 // hide nav bar
        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
        | View.SYSTEM_UI_FLAG_IMMERSIVE);
  }


  public void showUI() {
      decorView.setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
  }

0
投票

菜单处于活动状态时如何隐藏导航栏?

© www.soinside.com 2019 - 2024. All rights reserved.