软button栏的尺寸

有没有办法确定没有硬菜单button的设备的菜单栏的尺寸(宽度)? (如拱门装置)。

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

Solutions Collecting From Web of "软button栏的尺寸"

这个方法对于在Android KitKat(4.4)中设置布局填充非常有用。 使用这个,你可以避免软button栏重叠你的布局。

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

testing了Nexus 5和Nexus 7 2013。

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

既然你不能直接得到Activiy的DecorView的引用,你需要先使用访问器方法getWindow()来获得Activity的窗口。 这将返回包含Activity和其他屏幕元素的窗口对象。 要获取包含活动的decorView以及屏幕装饰(即状态栏,导航栏/软button栏,调用访问器方法getDecorView())。 一旦你有一个DecorView调用getWindowVisibleDisplayFrame(Rect)的引用,你将有一个加载的Rect对象。

启动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()