2013年6月15日 星期六

Android app的status bar高度

status bar就是android手機最上面那一條有顯示電量與時間的bar,

為了寫一個可以在不同size螢幕上面都能按照同比例顯示view的layout需要得到status bar的高度來幫助計算.

一開始google都是找到類似如下的答案

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;
int contentViewTop= 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int TitleBarHeight= contentViewTop - StatusBarHeight;

   Log.i("*** Jorgesys :: ", "StatusBar Height= " + StatusBarHeight + " , TitleBar Height = " + TitleBarHeight);
( from http://stackoverflow.com/questions/3355367/height-of-statusbar/3356263#3356263)

雖然這樣可以拿到我要的status bar高度, 但是有一個大缺點, 就是這個方法要等到整個畫面被畫出來以後才根據畫出來的結果來計算status bar高度.

偏偏android的life cycle中, 畫面被畫出來是在onCreate(), onResume(), onRestart()等步驟之後,

所以在這些override function內是不能拿到正確的status bar heigth的!!

很不方便.

直到最近偶然發現了更好的方法:

public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; }

from http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/

真是太猛了這樣一來就可以在onCreate()等處得到status bar的高度,

Comments中還有提到

<sdk-root>/platforms/android-<version>/data/res/values/dimens.xml

內還有一堆參數也都拿的到啊!!!



沒有留言:

張貼留言