在修正一个功能是,因为手机存在虚拟功能键(底部状态栏),获取到的屏幕高度为除虚拟功能键外的屏幕高低,导致界面上显示存在误差.上文提供的方法完美的解决了我项目中存在的问题.
原项目使用的获取屏幕高度方法:
/**
* 获取屏幕尺寸,但是不包括虚拟功能高度
*
* @return
*/
public int getNoHasVirtualKey() {
int height = getWindowManager().getDefaultDisplay().getHeight();
return height;
}
而实际上,我的测试设备是存在虚拟功能键的,因此需要使用以下方法
/**
* 通过反射,获取包含虚拟键的整体屏幕高度
*
* @return
*/
private int getHasVirtualKey() {
int dpi = 0;
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
method.invoke(display, dm);
dpi = dm.heightPixels;
} catch (Exception e) {
e.printStackTrace();
}
return dpi;
}