web-dev-qa-db-ja.com

ステータスバーとソフトキーボタンバーの高さを取得する方法

Androidソフトボタンバーとステータスバーの合計サイズを取得する方法はありますか?これらの両方のバーの高さなしで画面の高さを取得する方法はありますか?常に同じ、例えばネクサス7を見てください)

17
Joske369

ステータスバーの高さ

ステータスバーの高さは画面サイズに依存します。たとえば、240 X 320画面サイズのデバイスでは、ステータスバーの高さは20px320 X 480画面サイズのデバイスの場合、ステータスバーの高さは25px480 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;
}
_

参照:

Androidのステータスバーの高さ

ソフトボタンバーの寸法

37