上一篇有写到状态栏(StatusBar)和虚拟键(NavigationBar)的状态设置,忘记写获取高度的设置了,在这里再记录一下
获取状态栏的高度:
/**
* 用于获取状态栏的高度。
*/
public static int getStatusBarHeight(Activity mActivity) {
int statusBarHeight = 0;
try {
Class<?> c = Class.forName("com.android.internal.R$dimen");
Object o = c.newInstance();
Field field = c.getField("status_bar_height");
int x = (Integer) field.get(o);
statusBarHeight = mActivity.getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
Rect frame = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
statusBarHeight = frame.top;
}
final float scale = mActivity.getResources().getDisplayMetrics().density;
return (int) ((float) statusBarHeight / scale + 0.5f);
}
虚拟键(NavigationBar)的高度获取:
首先得获取没有虚拟键(NavigationBar)屏幕的高度:
/**
* 获取屏幕尺寸,但是不包括虚拟功能高度
*
* @return
*/
public static int getNoNavigationBarHeight(Activity activity) {
int height = activity.getWindowManager().getDefaultDisplay().getHeight();
return height;
}
首先得获取包含虚拟键(NavigationBar)屏幕的高度:
/**
* 获取屏幕尺寸,但是不包括虚拟功能高度
*
* @return
*/
public static int getNavigationHeight(Activity activity) {
int dpi = 0;
Display display = activity.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;
}
虚拟键(NavigationBar)的高度:
getNavigationHeight(Activity activity) - getNoNavigationBarHeight(Activity activity);