6

对于正常使用,您可以使用 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;
4

2 回答 2

6

您应该使用此处官方文档中的Display.getRealSize(Point)

显示区域以两种不同的方式描述。

应用程序显示区域指定可能包含应用程序窗口的显示部分,不包括系统装饰。

应用显示区域可能会小于实际显示区域,因为系统会减去状态栏等装饰元素所需的空间。使用以下方法查询应用程序显示区域:getSize(Point)、getRectSize(Rect) 和 getMetrics(DisplayMetrics)。

实际显示区域指定了包含系统装饰等内容的显示部分。即便如此,如果窗口管理器使用 (adb shell am display-size) 模拟较小的显示器,实际显示区域可能小于显示器的物理尺寸。使用以下方法查询真实显示区域:getRealSize(Point)、getRealMetrics(DisplayMetrics)。

于 2013-05-12T00:48:29.110 回答
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) {
}
于 2013-11-25T08:09:50.417 回答