关于华为手机自定义view中NavigationBar显示与隐藏造成高度问题的解决办法
2017-08-05 11:02
891 查看
//获取是否存在NavigationBar public static boolean checkDeviceHasNavigationBar(Context context) { //通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar boolean hasMenuKey = ViewConfiguration.get(context) .hasPermanentMenuKey(); boolean hasBackKey = KeyCharacterMap .deviceHasKey(KeyEvent.KEYCODE_BACK); if (!hasMenuKey && !hasBackKey) { // 做任何你需要做的,这个设备有一个导航栏 return true; } return false; } //获取是否存在NavigationBar public static boolean checkHuaWeiDeviceHasNavigationBar(Context context) { boolean hasNavigationBar = false; b6ed try { Resources rs = context.getResources(); int id = rs.getIdentifier("config_showNavigationBar", "bool", "android"); if (id > 0) { hasNavigationBar = rs.getBoolean(id); } 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)) { hasNavigationBar = false; } else if ("0".equals(navBarOverride)) { hasNavigationBar = true; } } catch (Exception e) { } return hasNavigationBar; } //NavigationBar状态是否是显示 public boolean isNavigationBarShow() { Activity mContext = (Activity) context; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Display display = mContext.getWindowManager().getDefaultDisplay(); Point size = new Point(); Point realSize = new Point(); display.getSize(size); 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; } }}
//获取NavigationBar高度
private int getNavigationBarHeight() {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int height = resources.getDimensionPixelSize(resourceId);
Log.v("dbw", "Navi height:" + height);
return height;
} 之后重写onMeasure方法在该方法中进行判断是否存在NavigationBar,若存在判断NavigationBar的显示与隐藏,之后重新计算高度
相关文章推荐
- 关于6.0ScrollView嵌套RecyclerView高度不正确显示不全问题解决办法
- NavigationBar 隐藏和显示带来的问题和解决办法
- 关于项目中依赖的design版本升级过后,项目中的自定义behavivor(上拉隐藏,下拉显示)的view隐藏后不再显示的问题解决方案
- html关于强制显示、隐藏浏览器的滚动条,解决由于高度变化带来的滚动条影响页面宽度的问题
- 关于GridValue的刷新,列顺序混乱问题解决以及关于显示和隐藏列的办法
- android 关于软键盘的显示和隐藏监听,解决挡住Editview的问题
- 关于android使用design:25.1.0及以上包后,使用自定义behavivor(上拉隐藏,下拉显示)的view隐藏后不再显示的问题
- 华为手机android studio调试信息LogCat不显示问题解决办法
- 关于自定义View显示gif图片的问题解决
- 关于TableView中不止一个section的情况下首个cell的y轴不为0的会造成的问题和解决办法
- 关于QTE4的汉字显示问题的终极解决办法!!!(亲测可用!)
- 如何解决关于TableView里面cell随机显示的问题
- 关于webview 加载本地图片资源 显示不出来的解决办法
- 关于webview 加载本地图片资源 显示不出来的解决办法
- 华为 P1 wifi 连接显示"身份验证出现问题"解决办法
- 关于SWT中 composite 嵌套 composite 内容无法显示的问题解决办法
- 关于使用Intel集成显示芯片桌面右键迟钝问题的解决办法
- iTextSharp应用中关于“Cannot access a closed Stream”问题的解决办法(附带提供如何在页面中显示PDF的流)
- 如何解决关于TableView里面cell随机显示的问题