文章目录
获取屏幕宽高
通过Display.getMetrics()或Display.getRealMetrics()
1. 使用Display.getMetrics()
,不包括底部导航栏高度
public static int getScreenHeight(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
//不包括底部导航栏高度
display.getMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
2. 使用Display.getRealMetrics()
,包括底部导航栏高度
public static int getScreenRealHeight(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
// 获取屏幕真正高度,包括底部导航栏,如华为荣耀系列的导航栏,
// 要求API>=17, 不过<17也能用不会报错
display.getRealMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
获取状态栏高度
1. 通过状态栏的ID获取:
public static int getStatusBarHeight(Context context) {
int height = -1;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
height = context.getResources().getDimensionPixelSize(resourceId);
}
return height;
}
2. 通过View.getWindowVisibleDisplayFrame方法
这个方法只有在Activity布局加载完成后调用才有效:
// 在activity的onWindowFocusChanged(boolean hasFocus)方法中有效
public static int getStatusBarHeight(Activity activity) {
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return rect.top;
}
获取底部导航栏高度
-
直接调用上面的方法相减:
getScreenRealHeight() - getScreenHeight()
public static int getNavigationHeight(){ return getScreenRealHeight() - getScreenHeight(); }
-
通过导航栏的ID获取:
public static int getNavigationBarHeight(Context context) { int height = -1; int resourceId = context.getResources() .getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { height = context.getResources().getDimensionPixelSize(resourceId); } return height; }
dp 转 px
public static int dp2px(Context context, int dp) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return (int) (dp * dm.density);
}
px 转 dp
public static int px2dp(Context context, int px) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return (int) (px/dm.density);
}