Andorid獲取狀態欄高度


在應用開發中,有時我們需要用代碼計算布局的高度,可能需要減去狀態欄(status bar)的高度。狀態欄高度定義在Android系統尺寸資源中status_bar_height,但這並不是公開可直接使用的,例如像通常使用系統資源那樣android.R.dimen.status_bar_height。但是系統給我們提供了一個Resource類,通過這個類我們可以獲取資源文件。下邊是在Activity中獲取的方法

 

?
1
2
3
4
5
6
7
8
public int getStatusBarHeight() {
   int result = 0 ;
   int resourceId = getResources().getIdentifier( "status_bar_height" , "dimen" , "android" );
   if (resourceId > 0 ) {
       result = getResources().getDimensionPixelSize(resourceId);
   }
   return result;
}

 

 

 

這里還有另外一種方法,大家都知道Android的所有資源都會有惟一標識在R類中作為引用。我們也可以通過反射獲取R類的實例域,代碼如下

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
  * 獲得狀態欄的高度
  *
  * @param context
  * @return
  */
public static int getStatusHeight(Context context) {
 
     int statusHeight = - 1 ;
     try {
         Class<!--?--> clazz = Class.forName( "com.android.internal.R$dimen" );
         Object object = clazz.newInstance();
         int height = Integer.parseInt(clazz.getField( "status_bar_height" )
                 .get(object).toString());
         statusHeight = context.getResources().getDimensionPixelSize(height);
     } catch (Exception e) {
         e.printStackTrace();
     }
     return statusHeight;
}

\

 

我們可以看到得到的結果是一樣的。當然,獲取狀態欄的高度方法是不是就只有以上兩種呢,當然不是,下邊再介紹一種獲取狀態欄高度的方法,不過不推薦使用,因為這個方法依賴於WMS(窗口管理服務的回調)。

 

?
1
2
3
4
Rect rectangle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight= rectangle.top;

 

 

結伴旅游,一個免費的交友網站:www.jieberu.com

推推族,免費得門票,游景區:www.tuituizu.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM