如何获取状态栏和软键按钮栏的高度?
问题描述:
有没有在Android的方式来获得软按钮栏和状态栏的大小togheter?或者在没有这两个酒吧的高度的情况下获得屏幕高度的方法? (它们不总是相同的,看的关系7例如)状态栏的如何获取状态栏和软键按钮栏的高度?
答
身高
状态栏的高度取决于屏幕的尺寸,例如在一个装置与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;
}
参考:
哇非常感谢这个答案。我认为第二种方法不会工作,如果你同时拥有状态栏和软按钮栏,我猜测我错了,我已经测试过了,它可以工作。 :D更好,它的工作原理和API 16也一样! – Joske369 2015-04-01 21:15:41
@不客气。我现在编辑;-) – 2015-04-01 21:20:24
只有一个问题,当状态栏是软按钮栏,第一种方法返回25像素和softbuttons方法返回48像素(索尼xperia平板s) – Joske369 2015-04-01 21:34:25