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

 


获得StatusBar的高度:

方法一:

Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;

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

new View(this).post(new Runnable()
{
					
	@Override
	public void run()
		{
			// TODO Auto-generated method stub
			Rect rect = new Rect();
			getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
			int statusBarHeight = rect.top;
			System.out.println("statusBarHeight:" + statusBarHeight);
		}
});

或者放在Activity的onWindowFocusChanged方法中

@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		// TODO Auto-generated method stub
		super.onWindowFocusChanged(hasFocus);
		Rect rect = new Rect();
		getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
		int statusBarHeight = rect.top;
		System.out.println("statusBarHeight:" + statusBarHeight);
		
	}

 


方法二:

用反射

	Class<?> c = null;
        Object obj = null;
        Field field = null;
        int x = 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(Exception e){
                e.printStackTrace();
        }

 


另外要注意的是,如果计算时状态栏已经被隐藏了,则得到的高度为负数,所以只有在状态栏被隐藏前才能计算其高度。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值