对于正常用途,您可以使用DisplayMetrics类并获得“可渲染”大小,但我想弄清楚实际的物理屏幕大小,其中包括虚拟按钮高度。
在我的Galaxy Nexus上报告的尺寸无论我尝试的是1196x720,我可以使用什么来获得物理的1280x720?同样适用于Nexus 7,Nexus 4和Nexus 10设备。
更新:这是我现在使用的最终代码,包括修复:
//Activity A = this;
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) A.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
int API_LEVEL = android.os.Build.VERSION.SDK_INT;
if (API_LEVEL >= 17)
{
disp.getRealMetrics(displayMetrics);
}
else
{
disp.getMetrics(displayMetrics);
}
int Width = displayMetrics.widthPixels;
int Height = displayMetrics.heightPixels;
答案 0 :(得分:6)
您应该使用Display.getRealSize(Point)来自官方文档here
显示区域以两种不同的方式描述。
应用程序显示区域指定显示的部分 可能包含一个应用程序窗口,不包括系统装饰。
应用程序显示区域可能小于实际显示区域 因为系统减去了装饰元素所需的空间 作为状态栏。使用以下方法查询应用程序 显示区域:getSize(Point),getRectSize(Rect)和 getMetrics(DisplayMetrics)。
实际显示区域指定部件 显示内容包含系统装饰的内容。 即便如此,实际显示区域可能小于物理尺寸 如果窗口管理器正在模拟较小的显示器,则显示 使用(adb shell am display-size)。使用以下方法进行查询 真正的显示区域:getRealSize(Point), getRealMetrics(DisplayMetrics)。
答案 1 :(得分:4)
类似问题的答案似乎有一个解决方案,以获得API<时显示器的实际尺寸。 17 https://stackoverflow.com/a/15699681/601298
WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
widthPixels = realSize.x;
heightPixels = realSize.y;
} catch (Exception ignored) {
}