有没有办法确定没有硬菜单按钮的设备菜单栏的尺寸(宽度)? (就像archos设备一样)。
我需要知道屏幕的可用尺寸......
答案 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
}