Android中獲取狀態(tài)欄高度的兩種方法分享
前言
最近在做一個關于FAB的功能的時候需要獲取狀態(tài)欄的高度,在網上查了很多種方法,下面是選出的比較合理的兩個方法。主要參考stackoverflow的這篇問答:http://stackoverflow.com/questions/3407256/height-of-status-bar-in-android
方法一:
private double getStatusBarHeight(Context context){ double statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density); return statusBarHeight; }
這種方法很簡單,只有一行代碼,查過參考手冊后可以翻譯一下:
狀態(tài)欄高度=取大于其的最小整數(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)
所以得到的狀態(tài)欄高度為25*3=75
由這種方法得到的狀態(tài)欄高度具有較大局限性,比如因為某種需要去掉狀態(tài)欄或本身沒有狀態(tài)欄,此時狀態(tài)欄高度應為0,但是該方法依然能夠得到一個非零的狀態(tài)欄高度。
方法二:
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,其中第一個參數是要獲取資源對象的名稱,比如我們要獲取狀態(tài)欄的相關內容,這里填入"status_bar_height";第二個參數是我們要獲取什么屬性,我們要獲取高度內容,所以填入"dimen";第三個是包名,狀態(tài)欄是系統(tǒng)內容,故填入“android”。
另外一個用到的辦法是getDimensionPixelSize()
,由函數名就能知道是根據資源ID獲得資源像素尺寸,這里就直接獲得狀態(tài)欄的高度。
這種方法在狀態(tài)欄不存在的時候就會獲得其高度為0.
總結
以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
Flutter開發(fā)技巧RadialGradient中radius計算詳解
這篇文章主要為大家介紹了Flutter小技巧RadialGradient?中?radius?的計算詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Android ViewPager制作新手導航頁(動態(tài)加載)
這篇文章主要為大家詳細介紹了Android ViewPager制作新手導航頁,了解什么是動態(tài)加載指示器,感興趣的小伙伴們可以參考一下2016-05-05靈活使用Android中ActionBar和ViewPager切換頁面
這篇文章主要介紹了如何靈活使用Android中ActionBar和ViewPager切換頁面,感興趣的小伙伴們可以參考一下2015-12-12Eclipse下配置Ant腳本并自動打包帶簽名的Android apk
這篇文章主要介紹了Eclipse下配置Ant腳本并自動打包帶簽名的Android apk的相關資料,需要的朋友可以參考下2016-03-03