获取状态栏高度

获取状态栏高度有两种方式:
一、decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。
于是,我们就可以算出状态栏的高度了。
 
   

Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;

但是,这段代码不能插入Activity的onCreate()和onResume()函数中,否则得到的两个值都为0 。我的做法是将之插入到onPause()函数中,成功得到两个正确值。
二、通过反射机制获取
public static int getStatusBarHeight(final Context mContext){

Class c = null;
Object obj = null;
Field field = null;
int x = 0, sbar = 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());
sbar = mContext.getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
Log.e("EXCEPTION","get status bar height fail");
e1.printStackTrace();
}
System.out.println("x = " + x + ",sbar = " + sbar) ;
return sbar;

}


你可能感兴趣的:(android,app)