之前在获取android状态栏的时候,一直用如下方法获取的
protected int getStatusBarHeight(){
Rect frame=new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
return frame.top;
}
经过多次测试后,有些机型获取的时候,得到的高度总是0,可能是该getWindowVisibleDisplayFrame(Rect rect)
方法,获取不到通知栏的窗体吧。
下面该方法通过反射的方法,获取类的属性来达到的:
protected int getStatusBarHeight(){
Class<?> c = null;
Object obj = null;
Field field = null;
int x = 0, sbar = 38;//默认为38,貌似大部分是这样的
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 = getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
e1.printStackTrace();
}
return sbar;
}