Android全面屏虚拟导航栏适配

本文探讨了Android全面屏手机虚拟导航栏的适配问题,包括传统的判断方法和存在的问题。提出了一种新的解决方案,通过分析系统布局找到虚拟导航栏的View来判断其存在。此外,还分享了针对特定厂商如vivo、小米的判断方法,但指出其局限性和不通用性。文章强调了随着手机形态变化,开发者应对适配问题保持关注。

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

{
int id = resources.getIdentifier(“config_showNavigationBar”, “bool”, “android”);
// 判断系统是否写入了关于是否显示虚拟导航栏的相关变量,如果为true,表示有虚拟导航栏
return id > 0 && resources.getBoolean(id);
}

又或者方法3:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Display display = context.getWindowManager().getDefaultDisplay();
Point size = new Point();
Point realSize = new Point();
display.getSize(size); // app绘制区域
display.getRealSize(realSize);
return realSize.y != size.y;
} else {
boolean menu = ViewConfiguration.get(context).hasPermanentMenuKey();
boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);// 判断是否存在物理按键
if (menu || back) {
return false;
} else {
return true;
}
}

以上三个方法,基本上都是看系统中是否有虚拟导航栏的相关定义,即如果我们能发现系统中由虚拟导航栏相关的定义,就认定虚拟导航栏存在。这个思考方式源于手机的物理导航键和虚拟导航键一直以来都是对立存在的,即去掉了物理导航键,那么就会使用虚拟导航栏,如果存在虚拟导航栏,那么就没有物理按键。有了A就没有B,如果存在了B,那就没有A。在这种前提下,那种思考方式不会有什么问题。

然而全面屏手机打破了这种对立存在的格局,去掉了物理导航键,但同时也隐去了虚拟导航栏(即手机确实集成了虚拟导航栏,但是没有使用),取而代之的是通过全面屏手势实现三个按键的功能。所以说,全面屏手机+全面屏手势。是导致以往判断方法失效的原因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

回过头想,导致判断失效更本质的原因,其实是因为我们的判断方法都是间接判断,是去寻找必要条件,而非充分条件,就好比我们在夜晚看到了月亮的光芒,并不能证明月亮是自发光的物体,除非假设一个前提:能发光的物体都是自发光的。证明才能成立。而全面屏的到来,正好打破了这个前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值