天天看點

Android擷取裝置狀态欄status bar高度的正确姿勢

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,請小心選擇使用。

繼續閱讀