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

來源:互聯網
上載者:User
我們常見的長度單位有: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(),但實際是應該按照四捨五入法取整,還是進一法取整,還是什麼其它規則,我沒有驗證,有需要的同學可以自己驗證一下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.