android Navigator的高度计算和判断是否显示
2015-06-04 08:50
369 查看
进入互联网行业几天了, 从手机行业转到互联网行业也在慢慢的适应: IDE工具的使用(之前一直在Ubuntu 命令行进行开发), 版本管理工具,代码架构等等这些都需要重新适应。 好在本人还有一些底子,所以适应起来还算快^_^. 今天就从昨天遇到的一个小问题开始分享
先上图
如图所示,在使用popupwindow显示menu时, 底部navigator与确定按钮重叠。
解决此问题思路就是判断底部navigator是否已经打开, 如果打开则计算navigator的高度, 然后在调用popupwindow.showAtLocation时, 将y坐标做位移navigator的高度
具体方法可以看下面两个方法: 分别是判断navigator的高度和navigator是否显示---mcoy是本人的英文名称^_^
/**
* add by mcoy for bugID=427
* @return 底部状态栏的高度
*/
private int getNavigationBarHeight() {
if(!hasSoftKeys((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))){
return 0;
}
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
int height = resources.getDimensionPixelSize(resourceId);
Log.e("mcoy", "the height is " + height);
return height;
}
/**
* add by mcoy for bugID=427, 判断底部navigator是否已经显示
* @param windowManager
* @return
*/
private boolean hasSoftKeys(WindowManager windowManager){
Display d = windowManager.getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
int realHeight = realDisplayMetrics.heightPixels;
int realWidth = realDisplayMetrics.widthPixels;
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getMetrics(displayMetrics);
int displayHeight = displayMetrics.heightPixels;
int displayWidth = displayMetrics.widthPixels;
return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;
}
先上图
如图所示,在使用popupwindow显示menu时, 底部navigator与确定按钮重叠。
解决此问题思路就是判断底部navigator是否已经打开, 如果打开则计算navigator的高度, 然后在调用popupwindow.showAtLocation时, 将y坐标做位移navigator的高度
具体方法可以看下面两个方法: 分别是判断navigator的高度和navigator是否显示---mcoy是本人的英文名称^_^
/**
* add by mcoy for bugID=427
* @return 底部状态栏的高度
*/
private int getNavigationBarHeight() {
if(!hasSoftKeys((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))){
return 0;
}
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
int height = resources.getDimensionPixelSize(resourceId);
Log.e("mcoy", "the height is " + height);
return height;
}
/**
* add by mcoy for bugID=427, 判断底部navigator是否已经显示
* @param windowManager
* @return
*/
private boolean hasSoftKeys(WindowManager windowManager){
Display d = windowManager.getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
int realHeight = realDisplayMetrics.heightPixels;
int realWidth = realDisplayMetrics.widthPixels;
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getMetrics(displayMetrics);
int displayHeight = displayMetrics.heightPixels;
int displayWidth = displayMetrics.widthPixels;
return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;
}
相关文章推荐
- (小技巧)从一个程序跳到另一个程序
- 为什么Android开发最抢手?
- Android PackageManager基础知识
- udacity android 学习笔记: lesson 4 part b
- udacity android 学习笔记: lesson 4 part a
- udacity android学习笔记: lesson 3
- udacity 之 android学习笔记:lesson 2
- Android 小米盒子使用电视特性标签
- Android中线程通讯类Handler
- Android.mk详解
- Android开发者:你真的会用AsyncTask吗?
- Android开发者:你真的会用AsyncTask吗?
- 一步消除导入Android项目所产生的错误
- Android-->动态加载Activity (不使用Intent,启动Activity)
- Android的Style的使用
- Android的Style的使用
- android布局属性详解
- Android开发中的引导页面
- Android Studio 1.2中配置androidannotations
- android dialog cancel/dismiss listener memory leak