现在的位置: 首页 > 综合 > 正文

如何获取StatusBar的高度(Android平台)

2013年08月23日 ⁄ 综合 ⁄ 共 2336字 ⁄ 字号 评论关闭
我们常见的长度单位有: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)英寸+ v% r9 K,
[7 d* t3 H: V! W

5. mm (millimeters)毫米 ) ~'
d& V" e3 @

6. pt (points)点

下面言归正传,来讲一下如何计算Android平台下StatusBar的高度。;
e) D3 ~# @5 Q6 x9 O& o8 l


在默认情况下,StatusBar的高度是25dip,这个值是不会变的,不管你的屏幕是240*320的还是600*800的或者还是其它分辨率的,StatusBar的高度都是25dip。+
s8 D2 A1 h/ z" B3 ~$ G; ]* L

也许有的同学会说,怎么可能嘛,值600*800的设备上StatusBar的高度明显要高很多嘛!  T7
i* F7 d$ [8 Q$ C9 \

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

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

& h- v  I4 k9 z, h
下面来教大家如何取得在不同设备上的这个高度。其实非常简单:

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

实际上,我们要做的就是把这个25dip的高度转换成px即可,因为我们在代码里需要的高度都是以px为单位的。9
z9 }9 u! B& }( n% u# A

9 ], m+ [3 _* r! `  V' w
以480*800分辨率的屏幕为例:上面的语句中得到的 metrics.density 值是1.5,用这个1.5乘以StatusBar的高度25,最后在做一个取整,得到的高度就是38,这个高度也就是在480*800的分辨率下,StatusBar的高度。
3 H9 I. J6 I9 i4 w3 Y& e
这里需要特别说明一下,在取整的运算中,我用的是Math.ceil(),但实际是应该按照四舍五入法取整,还是进一法取整,还是什么其它规则,我没有验证,有需要的同学可以自己验证一下。

我们常见的长度单位有: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)英寸+ v% r9 K,
[7 d* t3 H: V! W

5. mm (millimeters)毫米 ) ~'
d& V" e3 @

6. pt (points)点

下面言归正传,来讲一下如何计算Android平台下StatusBar的高度。;
e) D3 ~# @5 Q6 x9 O& o8 l


在默认情况下,StatusBar的高度是25dip,这个值是不会变的,不管你的屏幕是240*320的还是600*800的或者还是其它分辨率的,StatusBar的高度都是25dip。+
s8 D2 A1 h/ z" B3 ~$ G; ]* L

也许有的同学会说,怎么可能嘛,值600*800的设备上StatusBar的高度明显要高很多嘛!  T7
i* F7 d$ [8 Q$ C9 \

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

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

& h- v  I4 k9 z, h
下面来教大家如何取得在不同设备上的这个高度。其实非常简单:

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

实际上,我们要做的就是把这个25dip的高度转换成px即可,因为我们在代码里需要的高度都是以px为单位的。9
z9 }9 u! B& }( n% u# A

9 ], m+ [3 _* r! `  V' w
以480*800分辨率的屏幕为例:上面的语句中得到的 metrics.density 值是1.5,用这个1.5乘以StatusBar的高度25,最后在做一个取整,得到的高度就是38,这个高度也就是在480*800的分辨率下,StatusBar的高度。
3 H9 I. J6 I9 i4 w3 Y& e
这里需要特别说明一下,在取整的运算中,我用的是Math.ceil(),但实际是应该按照四舍五入法取整,还是进一法取整,还是什么其它规则,我没有验证,有需要的同学可以自己验证一下。

抱歉!评论已关闭.