Android隐藏导航栏/保持沉浸式模式与软键盘外观

使用使用沉浸式模式的客户端应用程序,使用以下代码隐藏每个活动的导航栏和状态栏:
int currentApiVersion = android.os.Build.VERSION.SDK_INT;

final int flags = 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;

// This work only for android 4.4+
if (currentApiVersion >= 19) {

        getwindow().getDecorView().setsystemUIVisibility(flags);
        // Code below is for case when you press Volume up or Volume down.
        // Without this after pressing valume buttons navigation bar will
        // show up and don't hide
        final View decorView = getwindow().getDecorView();
        decorView
                .setonsystemUIVisibilitychangelistener(new View.OnsystemUIVisibilitychangelistener() {

                    @Override
                    public void onsystemUIVisibilityChange(int visibility) {
                        if ((visibility & View.SYstem_UI_FLAG_FULLSCREEN) == 0) {
                            decorView.setsystemUIVisibility(flags);
                        }
                }
         });
}

唯一的问题是,他们希望应用程序保持沉浸式模式,即使软键盘显示输入到EditText中也不会显示导航栏.任何人都可以想到总是使用导航按钮(背面/隐藏键盘,家庭等)的方法,即使在使用键盘时总是隐藏?

解决方法

我想出了一个解决方法,检查每个内部的导航栏的状态,尝试隐藏它,并再次检查(再次).

这是一些代码,确保在软键盘关闭后的2秒内导航栏被隐藏.

private final Runnable checksystemUIRunnable = new Runnable() {
    @Override
    public void run() {
      checkHidesystemUI();
    }
  };

  private void checkHidesystemUI() {
    // Check if system UI is shown and hide it by post a delayed handler
    if (issystemUIShown) {
      hidesystemUI();
      handler.postDelayed(checksystemUIRunnable,SYstem_UI_HIDE_DELAY);
    }
  }

  private void hidesystemUI() {
    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);
  }

  // In onCreate()
    decorView.setonsystemUIVisibilitychangelistener(
            new View.OnsystemUIVisibilitychangelistener() {
              @Override
              public void onsystemUIVisibilityChange(int visibility) {
                if ((visibility & View.SYstem_UI_FLAG_FULLSCREEN) == 0) {
                  handler.postDelayed(checksystemUIRunnable,SYstem_UI_HIDE_DELAY);
                  issystemUIShown = true;
                } else {
                  issystemUIShown = false;
                }
              }
            });

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...