有那么个需求,是需要把状态栏和底部导航隐藏起来,在网上找到了很多方法但效果都不理想,
问题有:
1,一开始全部都可以隐藏,但是调用键盘时就会弹出底部导航栏和状态栏,还不会自动隐藏,有时还会挡住一些内容
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); //根据焦点隐藏状态栏,标题栏 if (hasFocus) {
int uiFlags = 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 if (android.os.Build.VERSION.SDK_INT >= 19) { uiFlags |= 0x00001000; //SYSTEM_UI_FLAG_IMMERSIVE_STICKY: hide navigation bars - compatibility: building API level is lower thatn 19, use magic number directly for higher API target level } else { uiFlags |= View.SYSTEM_UI_FLAG_LOW_PROFILE; } getWindow().getDecorView().setSystemUiVisibility(uiFlags);}}
2,第二种可以实现全屏显示但是,不能动态调用底部导航栏,而且底部导航栏弹出来又收回去了
位置:放在activity的onCreate里,当然好的习惯时另起一个方法调用
Window window; window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
|View.SYSTEM_UI_FLAG_FULLSCREEN;
window.setAttributes(params);
就在我苦恼时,我就想两个方法结合起来会怎样,于是动手起来,效果刚好能满足动态隐藏状态栏,导航栏,
而且键盘弹出收回去时导航栏,状态也收回去(虽然达不到我想要的效果,弹出键盘,
状态栏和导航也不要出来但也能满足需求了),想要知道效果?动手吧!
解决方法: 在两个地方调用,一个是activity的onCreate ,另一个是在焦点变化时调用
onWindowFocusChanged()方法里
/** * 隐藏底部底部导航栏 */ public void hideNavigationBar() { Window window; window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE|View.SYSTEM_UI_FLAG_FULLSCREEN; window.setAttributes(params); int uiFlags = 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 if (android.os.Build.VERSION.SDK_INT >= 19) { uiFlags |= 0x00001000; //SYSTEM_UI_FLAG_IMMERSIVE_STICKY: hide navigation bars - compatibility: building API level is lower thatn 19, use magic number directly for higher API target level } else { uiFlags |= View.SYSTEM_UI_FLAG_LOW_PROFILE; } getWindow().getDecorView().setSystemUiVisibility(uiFlags); }