软键盘出现时会出现状态栏,但在沉浸模式下软键盘消失时不会隐藏

最初我使用以下代码将我的Activity设置为沉浸模式:

View decorView = getWindow().getDecorView(); 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); 

一切正常,直到用户点击EditText并出现软键盘。 它会导致状态栏粘在顶部,即使在软键盘消失后也不会再次隐藏。 奇怪的是,我只在LG /三星手机上遇到过这个问题,索尼手机对此没有任何问题。 有人对此有任何想法吗?

像这样使用沉浸式模式。

 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); immersiveMode(); getWindow().getDecorView().setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { immersiveMode(); } }); } 

这是您的沉浸式模式function。

 public void immersiveMode() { final View decorView = getWindow().getDecorView(); 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); } 

也可以在OnResume()中调用immersiveMode () ; 现在,当软键板消失时,状态栏将消失。

这是我的解决方案; 首先,我检查了软键盘是否显示:

 getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(r); int screenHeight = getWindow().getDecorView().getRootView().getHeight(); int keypadHeight = screenHeight - r.bottom; //Log.d(TAG, "keypadHeight = " + keypadHeight); if (keypadHeight > screenHeight * 0.15) { //Keyboard is opened hideNavBar(); } else { // keyboard is closed } } }); 

我有一个hideNavBar()方法在软键盘出现时被触发。

 private void hideNavBar() { if (Build.VERSION.SDK_INT >= 19) { View v = getWindow().getDecorView(); v.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); } 

}

这解决了在输入要编辑的Edittext时获取导航栏的问题。