如何获取状态栏和软键按钮栏的高度?

Jos*_*369 17 android softkeys statusbar

在Android中是否有办法获得软按钮栏和状态栏的大小?或者一种方法去获得没有这两个高度的屏幕高度?(它们并不总是一样,例如看nexus 7)

Adr*_*uer 37

状态栏的高度

状态栏的高度取决于屏幕大小,例如,在屏幕尺寸为240 X 320且状态栏高度为20px的设备中,对于屏幕尺寸为320 X 480且状态栏高度为25px的设备,对于具有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); 
Run Code Online (Sandbox Code Playgroud)

要获取onCreate()Activity 的方法上的状态栏的高度,请使用以下方法:

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

软键按钮栏

此方法对于在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;
}
Run Code Online (Sandbox Code Playgroud)

参考:

Android中状态栏的高度

软按钮栏的尺寸

  • 哇非常感谢这个答案.我认为第二种方法不会起作用,以防你同时拥有状态和软键条,猜测我错了,我已经测试了这个并且它有效.:D更好,它的工作原理和API 16也是如此! (2认同)

Ho *_*ong 2

对我来说,在 android note 10 中,我需要通过 dimen 获取导航栏高度:

fun getSoftNavigationBarSize(resources: Resources): Int {
    var result = 0
    val resourceId: Int = resources.getIdentifier("navigation_bar_height", "dimen", "android")
    if (resourceId > 0) {
        result = resources.getDimensionPixelSize(resourceId)
    }
    return result
}
Run Code Online (Sandbox Code Playgroud)

  • 这会发出警告:“不支持使用内部插入尺寸资源navigation_bar_height”。这是否已被弃用,或者现在有其他方法可以做到这一点吗? (5认同)