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

如何获取StatusBar的高度

2015-09-28 14:08 344 查看
关键字:Android,Statusbar,高度,获取,获得,动态计算

下面先引用从网络上摘抄过来的一段话,来解释一下android上常用的一个长度单位——dip。

我们常见的长度单位有:px, dip, sp

1. px (pixels)像素:这个大家用得比较多, 一般我们HVGA代表320x480像素。

2. dip或dp (device independent pixels)设备独立像素:这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA cwj推荐使用这个,不依赖像素。

3. sp (scaled pixels — best for text size)放大像素: 主要处理字体的大小。

下面的不经常用到:

4. in (inches)英寸

5. mm (millimeters)毫米 

6. pt (points)点

下面言归正传,来讲一下如何计算Android平台下StatusBar的高度。

在默认情况下,StatusBar的高度是25dip,这个值是不会变的,不管你的屏幕是240*320的还是600*800的或者还是其它分辨率的,StatusBar的高度都是25dip。

也许有的同学会说,怎么可能嘛,值600*800的设备上StatusBar的高度明显要高很多嘛!

不错,值600*800这样的设备上,StatusBar的高度看起来确实比240*320的屏幕上高很多,但是它的的确确也是25dip,只不过此时它并不是25px。

在240*320分辨率的设备上,25dip,在设备上显示的时候,它的长度或者说高度就是25个像素,也就是25px;但是在600*800的设备上,这25dip就不再是25px了。

下面来教大家如何取得在不同设备上的这个高度。其实非常简单:

DisplayMetrics metrics = getResources().getDisplayMetrics();

int STATUS_BAR_HEIGHT = (int) Math.ceil( 25 * metrics.density);

实际上,我们要做的就是把这个25dip的高度转换成px即可,因为我们在代码里需要的高度都是以px为单位的。

以480*800分辨率的屏幕为例:上面的语句中得到的 metrics.density 值是1.5,用这个1.5乘以StatusBar的高度25,最后在做一个取整,得到的高度就是38,这个高度也就是在480*800的分辨率下,StatusBar的高度。

这里需要特别说明一下,在取整的运算中,我用的是Math.ceil(),但实际是应该按照四舍五入法取整,还是进一法取整,还是什么其它规则,我没有验证,有需要的同学可以自己验证一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息