您的位置:首页 > 其它

获取屏幕宽高、DPI、状态栏高度和底部导航栏高度

2017-06-02 21:32 886 查看

1. 获取屏幕宽高

方法一,返回像素值,不包括底部导航栏高度

public static int getHeightPx(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics); 获取屏幕信息,不包括底部导航栏
// displayMetrics.densityDpi;  //DPI
// displayMetrics.widthPixels; //宽度
return displayMetrics.heightPixels;//高度
}


方法二,返回像素值,包括底部导航栏高度

public static int getRealHeightPx(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
// 获取屏幕真正高度,包括底部导航栏,如华为荣耀系列的导航栏,
// 要求API>=17, 不过<17也能用不会报错
display.getRealMetrics(displayMetrics);
// displayMetrics.densityDpi;  //DPI
// displayMetrics.widthPixels; //宽度
return displayMetrics.heightPixels;//高度
}


2. 获取状态栏高度

方法一:

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;
}


方法二,这个方法只有在Activity加载完成后调用有效:

// 在activity的onWindowFocusChanged(boolean hasFocus)方法中有效
public static int getStatusHeight(Activity activity) {
Rect frame = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int height= frame.top;
return height;
}


3. 获取底部导航栏高度

直接调用上面的方法相减:
getRealHeightPx() - getHeightPx()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐