您的位置:首页 > 移动开发 > Android开发

Android获取屏幕宽高及状态栏高度的方法

2016-05-06 22:56 549 查看
获取屏幕宽度和高度

方法一:

WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth(); //屏幕宽度
int height = wm.getDefaultDisplay().getHeight(); //屏幕高度


方法二:

DisplayMetrics  dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels; //屏幕宽度
int screenHeight = dm.heightPixels; //屏幕高度


获取状态栏高度

方法一:

Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top; //状态栏高度


注意:该方法具有局限性,不能在onCreate里面使用,否则获取状态栏高度为0。

如果刚启动Activity时就要计算这些数据,最好在 onWindowFocusChanged 函数中进行,否则得到的某些数据可能是错误的,比如,应用区域高宽的获取。

所以,不建议使用此方法。

方法二:

private int statusBarHeight; //状态栏高度

public void getStatusBarHeight(Context context){
Class<?> c = null;
Object obj = null;
Field field = null;
int x = 0;
try {
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance();
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
statusBarHeight = context.getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
e1.printStackTrace();
}
}

getStatusBarHeight(this); //在onCreate方法中调用


这种方法在任何时候都能获得正常高度。

如果需要获得应用区域的高度,只需用屏幕高度减去状态栏即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: