NavigationBar可以说是我认为安卓中最丑陋的一块,即图中底部三个虚拟按钮(back、home、menu)
开发过程中,有时需要检测虚拟按键的高度,进行屏幕适配,获取其高度和判断其是否可见:
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;
}
此段代码已在荣耀V9、荣耀畅玩5检验。
getRealSize、getSize作用和区别(查看源码注释得知,单位像素):
(1)getRealSize获取显示器的实际尺寸,不减少任何窗口的装饰
(2)getSize()获取的值并不一定是最真实的大小,受系统装饰元素或所属的窗口管理器影响而有所不同。
网友评论