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();
}
另外要注意的是,如果计算时状态栏已经被隐藏了,则得到的高度为负数,所以只有在状态栏被隐藏前才能计算其高度。
相关文章推荐
- Android状态栏(一):StatusBar的浮动显示与隐藏
- Android:使用命令行工具adb、mksdcard等
- 糊里糊涂学Android(1)——Activity之间的数据传递
- android真机中使用sqlite3
- android 禁止横竖屏切换时activity重新启动
- android报错及解决2--Sdcard进行文件的读写操作报的异常
- android程序中 直接打开系统设置的锁定屏幕界面
- android资料(闪光灯手电筒)
- android canvas drawText \r\n 换行
- Android 瀑布流布局
- 电话号码归属查询
- android中各种传感器的应用与编程实例
- android Intent <初步进入intent>
- Android anr 产生的原因和如何避免
- Android模拟器源码Qemu Study for Android Emulator
- android的开发环境配置
- 【Android】Android设计准则
- Android基础综合案例(一)
- JVM和Dalvik的区别
- Android的消息循环机制 Looper Handler类分析