软按钮栏的尺寸

时间:2011-12-31 16:13:46

标签: android

有没有办法确定没有硬菜单按钮的设备菜单栏的尺寸(宽度)? (就像archos设备一样)。

我需要知道屏幕的可用尺寸......

4 个答案:

答案 0 :(得分:14)

此方法对于在Android KitKat(4.4)中设置布局填充非常有用。使用此功能,您可以避免在布局上重叠的软按钮栏。

getRealMetrics方法仅适用于API 17和+,但我只使用我为API 19 +上的设备编写的以下方法

@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;
}

测试Nexus 5& Nexus 7 2013。

答案 1 :(得分:3)

对于遇到此问题的人来说,答案非常晚。获取可用空间量抵消任何软键/导航栏甚至状态栏的简单方法是使用Apps DecorView中的getWindowVisibleDisplayFrame(Rect)。这将加载一个Rect对象,其中包含实际可用的显示尺寸。

由于您无法直接获取对Activiy的DecorView的引用,因此您需要首先使用访问器方法getWindow()获取Activity窗口。这将返回保存Activity和其他屏幕元素的窗口对象。要获取包含活动以及屏幕装饰的decorView,即状态栏,导航栏/软按钮栏,调用访问器方法getDecorView()。一旦你有一个对DecorView的引用调用getWindowVisibleDisplayFrame(Rect),你将有一个加载的Rect对象。

答案 2 :(得分:0)

启动Andorid 3.2,系统状态栏的高度不包含在DisplayMetrics的高度中,您必须使用未记录的API(Display.getRawWidth()和Display.getRawHeight())来获取物理屏幕的宽度或高度。

Method mGetRawW = Display.class.getMethod("getRawWidth");
Method mGetRawH = Display.class.getMethod("getRawHeight");

int nW = (Integer)mGetRawW.invoke(dp);
int nH = (Integer)mGetRawH.invoke(dp);

更新:对于API 13-16,您必须使用上面的代码来获得真实的宽度/高度。对于API 17+,您现在可以使用新的公共API Display.getRealSize()

答案 3 :(得分:0)

对我来说,在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

}