android获取状态栏高度

最近做了一个需求,做一个弹窗,但是弹窗位置是动态设置上去的,所以位置是要减去屏幕的状态栏高度,所以查了下android获取状态栏的高度,刚开始使用的是下面的方式:

    Rect rc= new Rect();
    Window window= getWindow();
    window.getDecorView().getWindowVisibleDisplayFrame(rc);
    int statusBarHeight= rc.top;

用上边的方式获取之后,我在华为的一个4.0版本手机上运行没有问题,但是当我在一个三星的5.0版本的手机上测试时,却获取不到高度,rc的值一直为零。最后查了一下这个方法依赖于WMS(窗口管理服务的回调),而android在5.0及一些手机上状态栏已经被应用打通了,所以获取不到。(这个是自己感觉,未经实证,希望大家指正)。后来在网上查寻了下大神们的获取方式,有以下两种,都可以准确获取,推荐使用:

    //状态栏高度
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    //状态栏高度
    int statusHeight = -1;
    try {
        Class clazz = Class.forName("com.android.internal.R$dimen");
        Object object = clazz.newInstance();
        int height = Integer.parseInt(clazz.getField("status_bar_height")
                .get(object).toString());
        statusHeight = context.getResources().getDimensionPixelSize(height);
    } catch (Exception e) {
        e.printStackTrace();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值