2015-04-01 63 views

回答

26

身高

狀態欄的高度取決於屏幕的尺寸,例如在一個裝置與240 X 320畫面尺寸的狀態欄的高度是20像素,用於將設備與320 X 480畫面尺寸的狀態欄的高度是25像素,用於與480 x 800的狀態欄高度的裝置必須38px

所以我建議使用這個腳本來獲取狀態欄高度

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; 

Log.i("*** Value :: ", "StatusBar Height= " + statusBarHeight + " , TitleBar Height = " + titleBarHeight); 

讓您的活動的onCreate()法狀態欄的高度,用這個方法:

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 KitKat(4.4)中設置佈局填充非常有用。使用此功能,您可以避免軟按鈕欄與佈局重疊。

getRealMetrics方法僅適用於API 17 +

@SuppressLint("NewApi") 
private int getSoftButtonsBarHeight() { 
    // getRealMetrics is only available with API 17 and + 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     int usableHeight = metrics.heightPixels; 
     getWindowManager().getDefaultDisplay().getRealMetrics(metrics); 
     int realHeight = metrics.heightPixels; 
     if (realHeight > usableHeight) 
      return realHeight - usableHeight; 
     else 
      return 0; 
    } 
    return 0; 
} 

參考:

Height of status bar in Android

Dimension of soft buttons bar

+1

哇非常感謝這個答案。我認爲第二種方法不會工作,如果你同時擁有狀態欄和軟按鈕欄,我猜測我錯了,我已經測試過了,它可以工作。 :D更好,它的工作原理和API 16也一樣! – Joske369 2015-04-01 21:15:41

+0

@不客氣。我現在編輯;-) – 2015-04-01 21:20:24

+0

只有一個問題,當狀態欄是軟按鈕欄,第一種方法返回25像素和softbuttons方法返回48像素(索尼xperia平板s) – Joske369 2015-04-01 21:34:25