转自:https://blog.csdn.net/xu_coding/article/details/80387893
方法1: 默认当做20dp计算,这也是大多手机的状态栏高度。
private void getStateBar1(){
double statusBarHeight = Math.ceil(20 * this.getResources().getDisplayMetrics().density);
tv_result1.setText("方法1--------》"+statusBarHeight);
}
方法2:通过反射获取
private void getStateBar2() {
Class c = null;
try {
c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("status_bar_height");
int x = Integer.parseInt(field.get(obj).toString());
int statusBarHeight = this.getResources().getDimensionPixelSize(x);
tv_result2.setText("方法2-----》"+statusBarHeight);
} catch (Exception e) {
e.printStackTrace();
}
}
方法3:直接获取属性,通过getResource
private void getStateBar3(){
int result = 0;
int resourceId = this.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = this.getResources().getDimensionPixelSize(resourceId);
}
tv_result3.setText("方法3------》"+result);
}
实际使用的时候,可以通过方法2或者方法3来获取,如果没有获取到,再默认当做20dp计算。个人测试结果,三种方式都返回60px的状态栏高度