Android 全面屏适配 NavigationBar

需求

先说下要实现的功能

有NavigationBar 在上边显示,没有则全屏显示

    

 

思路

  1. 设置导航栏透明属性
  2. 判断是否有虚拟导航栏
  3. 计算导航栏的高度

编码

设置导航栏透明属性

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

判断是否有虚拟导航栏

(找了很多方案,没有比较有效的方案,这里我采用了分机型适配)

华为

    private static boolean isSupportNavBar(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            //noinspection ConstantConditions
            Display display = wm.getDefaultDisplay();
            Point size = new Point();
            Point realSize = new Point();
            display.getSize(size);
            display.getRealSize(realSize);
            return realSize.y != size.y || realSize.x != size.x;
        }
        boolean menu = ViewConfiguration.get(context).hasPermanentMenuKey();
        boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
        return !menu && !back;
    }

 

小米

    private static boolean isXiaoMiNavigationBarShow(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            if (Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) != 0) {
                //开启手势,不显示虚拟键
                return false;
            }
        }
        return true;
    }

 

vivo

    private static boolean isVivoNavigationBarShow(Context context) {
        int val = Settings.Secure.getInt(context.getContentResolver(), "navigation_gesture_on", 0);
        return val != 0;
    }

 

计算导航栏的高度

private static int getNavigationHeight(Context context) {
    if (context == null) {
        return 0;
    }
    Resources resources = context.getResources();
    int resourceId = resources.getIdentifier("navigation_bar_height",
            "dimen", "android");
    int height = 0;
    if (resourceId > 0) {
        //获取NavigationBar的高度
        height = resources.getDimensionPixelSize(resourceId);
    }
    return height;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android navigationbar 是指在 Android 系统中的导航栏导航栏通常位于幕底部,用于提供用户导航和操作功能。它包含了一些常见的导航按钮,如返回、主页、多任务切换等。Android navigationbar 可以自定义其外观和行为,以适应不同设备和系统版本的需求。通过修改 NavigationBarFragment 的布局文件,可以对导航栏进行定制和扩展。 这样的导航栏Android SystemUI 中起着重要的作用,它提供了用户与系统交互的入口,并提供了快速访问常用功能和应用的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android SystemUI之NavigationBar导航栏(四)](https://blog.csdn.net/Bill_xiao/article/details/108517403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Android NavigationBar问题处理的方法](https://download.csdn.net/download/weixin_38608379/12770828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值