Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
来源:互联网 发布:java发牌程序 编辑:程序博客网 时间:2024/05/22 06:12
转自:http://www.jianshu.com/p/84d951b3f079 简书-十个雨点
有些时候,我们需要知道当前手机上是否显示了NavigationBar,也就是屏幕底部的虚拟按键。
比如截屏的时候,要获取屏幕的高度,必须包括NavigationBar的高度。
试过网上的多种方法,但是对那种可以通过手势来显示/隐藏的NavigationBar没办法,最后终于找到了一个好办法,看代码:
public boolean isNavigationBarShow(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Display display = 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(this).hasPermanentMenuKey(); boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); if(menu || back) { return false; }else { return true; } }}public static int getNavigationBarHeight(Activity activity) { if (!isNavigationBarShow(activity)){ return 0; } Resources resources = activity.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); //获取NavigationBar的高度 int height = resources.getDimensionPixelSize(resourceId); return height;}public static int getSceenHeight(Activity activity) { return activity.getWindowManager().getDefaultDisplay().getHeight()+getNavigationBarHeight(activity);}
......我简直烦死华为了......
还有个补充:我判断NavigationBar的高度是为了让软键盘不遮挡输入框,要获得状态栏的高度和导航栏的高度,要用到 可视高度 减 状态栏 减 导航栏private void initLayout() { final int statusBarHeight = StatusBarUtil.getStatusBarHeight(getContext());//状态栏// final int navigationBarHeight = StatusBarUtil.getNavigationBarHeight(getContext());//导航栏 rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { boolean showInput = false; @Override public void onGlobalLayout() { Rect r = new Rect(); rootView.getWindowVisibleDisplayFrame(r);//可视区域 int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top); if (heightDiff > 100) { if (!showInput) { showInput = true; } int navigationBarHeight = StatusBarUtil.getNavigationBarHeight(getActivity());//导航栏 if (rootView.getPaddingBottom() != heightDiff - statusBarHeight - navigationBarHeight) { if (navigationBarHeight == 0 && r.top == 0){ rootView.setPadding(0, 0, 0, heightDiff); }else { rootView.setPadding(0, 0, 0, heightDiff - statusBarHeight - navigationBarHeight); } } } else { if (!showInput) { return; } showInput = false; if (rootView.getPaddingBottom() != 0) { rootView.setPadding(0, 0, 0, 0); } } } }); }这里三星就很讨厌了,他的沉浸式状态栏不高度被抹掉了,不算进整个高度,所以rect.top = 0;知道这点是因为站在大神的肩膀上:http://www.cnblogs.com/android-joker/p/4414682.html以上~
1 0
- Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
- Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
- Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
- 获取屏幕真实高度包含NavigationBar(底部虚拟按键)
- 得到屏幕真实高度包含NavigationBar
- 获取StatusBar,NavigationBar高度及判断是否存在
- Android 获取NavigationBar高度
- Android 如何正确的获取屏幕高度
- 判断状态栏是否显示以及获取状态栏高度的方法
- Android 工具类(将 dp 转成 px 获取屏幕的高度/宽度 判断android SDK 版本是否大于等于5.0)
- android Navigator的高度计算和判断是否显示
- 【Android】ListView监听上下滑动(设置滚动监听判断ListView的滚动方向同时获取屏幕高度、ListView实际高度,判断是否需要展示返回顶部按钮(具体逻辑请看代码--附有详细注释)。
- Android 如何优雅的获取屏幕的高度和宽度
- 怎么获取navigationbar 的高度
- 【直播技术探讨第一章】
- Git命令速记
- 机器学习基石笔记2——在何时可以使用机器学习(2)
- caffe训练中create image数据产生的bug
- 图的遍历,深度优先与广度优先详解
- Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
- CABasicAnimation的基本使用
- 一个链接,让你的网站访客直接和你qq聊天
- 过滤器配置
- 人工智能\机器学习\统计学\数据挖掘之间有什么区别?
- 修改默认滚动条样式
- mysql导入备份数据时出错 ERROR 2005(HY000) unkonw MySQL server host。。。
- Unity3D(五)粒子系统
- bzoj2986 Non-Squarefree Numbers (莫比乌斯函数)