关于如何获取android状态栏高度

之前在获取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;
}

你可能感兴趣的:(关于如何获取android状态栏高度)