关于虚拟物理按键挡住底部导航栏的问题
2018-09-30 17:33
197 查看
部分安卓手机将物理按键弄成虚拟的物理按键显示在屏幕底部,这样就会挡住我们的app底部导航栏等情况;
我出现这种情况是因为主题里加了
<item name="android:windowTranslucentNavigation">true</item>
设置虚拟按键背景透明,不加这句就正常了。感觉不是很合理
网上找到通过代码来判断是否有虚拟按键 然后再来设置
[code]我们先判断一下你的手机是否含有NavigationBar这个东西,就是虚拟键,判断代码如下
[code]public static boolean isHaveNavigationBar(Context context) { boolean isHave = false; Resources rs = context.getResources(); int id = rs.getIdentifier("config_showNavigationBar", "bool", "android"); if (id > 0) { hasNavigationBar = rs.getBoolean(id); } try { Class systemPropertiesClass = Class.forName("android.os.SystemProperties"); Method m = systemPropertiesClass.getMethod("get", String.class); String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { isHave = false; } else if ("0".equals(navBarOverride)) { isHave = true; } } catch (Exception e) { Log.w("TAG", e); } return isHave; }
[code]返回为true的话就不给他设置,反之设置,具体代码如下:
[code]public static void transportStatus(Activity context){
[code] if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
[code] context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
[code] if (!isHaveNavigationBar(context))
[code] context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
[code] }
[code]}
这样就可以达到想要的效果了
阅读更多相关文章推荐
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- 关于Android开发中手机底部虚拟键的隐藏问题
- 华为底部虚拟导航栏挡住布局
- 关于nexus5的虚拟导航栏的问题
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- 关于微信小程序动态改变底部导航栏问题
- 关于在5.0上沉浸式布局虚拟按键的问题
- 关于在Windows Server2003上面配置虚拟目录物理路径为局域网内其他机器地址的若干问题
- Android 解决底部弹出PopWindow时如果有虚拟按键遮挡问题
- 华为手机使umeng分享popwindow被底部导航栏挡住问题
- Android 华为手机物理键盘挡住了我的应用底部导航栏
- 关于Android中物理按键不响应的可能的一个问题。
- 华为底部虚拟导航栏挡住布局
- 关于android 7.0全面屏,底部虚拟导航键 适配问题
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- 关于Android中物理按键不响应的可能的一个问题。
- Android底部虚拟按键遮挡popwindow问题
- android 虚拟导航挡住应用底部解决方案(屏幕底部的三个按键)
- 关于android6.0系统源码中出现DeskClock调用v7包中ActionBar其无法用物理按键控制其Tab上焦点的问题
- PopupWindow 在华为手机等某些自带虚拟导航栏底部被挡住的解决