Android擷取裝置狀态欄高度的正确姿勢
正确代碼方式:
int height = 0;
int resourceId = getApplicationContext().getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
height = getApplicationContext().getResources().getDimensionPixelSize(resourceId);
}
所得height即為裝置螢幕狀态欄高度,機關pix。該方法可以在onCreate裡面直接使用,與View的初始化先後順序無關,此方法穩定可靠,推薦使用上面的代碼擷取裝置狀态欄高度。
其他一些方法如果直接先于View初始化完成前計算高度,可能會獲得的高度值為0,取不到正确的狀态欄高度值。比如,下面這個方法是網上流傳很廣的方法,雖然在某些時候可以擷取,但是在有些時候擷取的狀态欄高度為0:
Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight = contentViewTop - statusBarHeight;
這個方法擷取狀态欄高度值,不可靠,若onCreate裡面的View未初始化加載完成,取出來的狀态欄高度值為0,請小心選擇使用。