获取状态栏高度

转载出处 https://blog.youkuaiyun.com/w_kahn/article/details/50684436

方法一:

    private double getStatusBarHeight(Context context){
            double statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);
            return statusBarHeight;
        }

这种方法很简单,只有一行代码,查过参考手册后可以翻译一下:

状态栏高度=取大于其的最小整数(25*上下文获取应用包的资源实例获取当前屏幕尺寸_屏幕密度比例)

其中density并不是真实的屏幕密度,而是一个相对密度,基准密度为160dpi,比如我测试的手机为HTC one m8,查的屏幕密度为441dpi,相对160为2.75,density就取为3。各分辨率的density取值为:

ldpi (dpi=120,density=0.75)
mdpi (dpi=160,density=1)
hdpi (dpi=240,density=1.5)
xhdpi (dpi=320,density=2)
xxhdpi (dpi=480,density=3)
所以得到的状态栏高度为25*3=75

由这种方法得到的状态栏高度具有较大局限性,比如因为某种需要去掉状态栏或本身没有状态栏,此时状态栏高度应为0,但是该方法依然能够得到一个非零的状态栏高度。

方法二:

    private int getStatusBarHeight(Context context) {
           int result = 0;
           int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
           if (resourceId > 0) {
               result = context.getResources().getDimensionPixelSize(resourceId);
           }
           return result;
       }

这里我们用到了getIdentifier()的方法来获取资源的ID,其中第一个参数是要获取资源对象的名称,比如我们要获取状态栏的相关内容,这里填入”status_bar_height”;第二个参数是我们要获取什么属性,我们要获取高度内容,所以填入”dimen”;第三个是包名,状态栏是系统内容,故填入“android”。

另外一个用到的办法是getDimensionPixelSize(),由函数名就能知道是根据资源ID获得资源像素尺寸,这里就直接获得状态栏的高度。

这种方法在状态栏不存在的时候就会获得其高度为0.

在微信开发中,获取状态栏高度有多种方式,以下为不同场景下的方法: ### 在微信小程序原生开发中 在全局`app.js`的`onLaunch`函数里,调用`wx.getSystemInfo`来获取手机状态栏高度,代码示例如下: ```javascript App({ onLaunch: function () { wx.getSystemInfo({ success: function (res) { console.log('手机状态栏高度:', res.statusBarHeight); } }) } }) ``` ### 在uni-app开发中 可以使用`uni.getSystemInfo`方法获取系统信息,从而得到状态栏高度,示例代码如下: ```javascript uni.getSystemInfo({ success: e => { console.log('获取小程序状态栏高度', e.statusBarHeight); } }); ``` 也可以使用同步方法`uni.getSystemInfoSync`获取,示例代码如下: ```javascript let statusBarHeight = uni.getSystemInfoSync().statusBarHeight; console.log('获取小程序状态栏高度', statusBarHeight); ``` ### 在uni-app vue3 微信小程序开发中 在页面加载时获取状态栏高度,代码示例如下: ```vue <template> <view class="bg"> <view :style="{ paddingTop: topPadding }"></view> </view> </template> <script setup> import { ref, onLoad } from 'vue'; import { uni } from '@dcloudio/uni-app'; let topPadding = ref('0px'); const getHeight = () => { let statusBarHeight = uni.getSystemInfoSync().statusBarHeight; console.log('获取小程序状态栏高度', statusBarHeight); }; onLoad(() => { getHeight(); }); </script> ``` 上述代码通过`uni.getSystemInfoSync`获取系统信息中的状态栏高度并输出到控制台。在实际应用中,可以根据需求对状态栏高度进行其他操作,例如设置页面的内边距等 [^1][^3][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值