Android 隐藏底部导航栏和状态栏,动态调用导航栏,键盘收回时也收回导航栏

本文介绍了一种在Android应用中动态隐藏状态栏和底部导航栏的方法,通过结合使用onCreate方法和onWindowFocusChanged回调,实现了键盘弹出时状态栏和导航栏自动隐藏的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有那么个需求,是需要把状态栏和底部导航隐藏起来,在网上找到了很多方法但效果都不理想,

问题有:

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


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值