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

Android状态栏(二):获得StatusBar的高度

2014-03-15 00:35 330 查看


获得StatusBar的高度:

方法一:

Rectrect=newRect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
intstatusBarHeight=rect.top;

但是此段代码不能直接放在onCreate方法或普通的线程中(否则得到的高度为0),可以放在View的post方法中,如下:

newView(this).post(newRunnable()
{

@Override
publicvoidrun()
{
//TODOAuto-generatedmethodstub
Rectrect=newRect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
intstatusBarHeight=rect.top;
System.out.println("statusBarHeight:"+statusBarHeight);
}
});

或者放在Activity的onWindowFocusChanged方法中

@Override
publicvoidonWindowFocusChanged(booleanhasFocus){
//TODOAuto-generatedmethodstub
super.onWindowFocusChanged(hasFocus);
Rectrect=newRect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
intstatusBarHeight=rect.top;
System.out.println("statusBarHeight:"+statusBarHeight);

}


方法二:

用反射

	Class<?>c=null;
Objectobj=null;
Fieldfield=null;
intx=0,statusBarHeight=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=getResources().getDimensionPixelSize(x);
}catch(Exceptione){
e.printStackTrace();
}


另外要注意的是,如果计算时状态栏已经被隐藏了,则得到的高度为负数,所以只有在状态栏被隐藏前才能计算其高度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: