【问题标题】:Android getDisplayMetrics() not returning accurate display sizeAndroid getDisplayMetrics() 未返回准确的显示尺寸
【发布时间】:2016-07-23 14:01:27
【问题描述】:

我正在尝试获取设备的像素宽度/高度,以便在屏幕上放置元素和映射触摸事件,但没有获得预期的效果(注意右下角的方块应该与右下角完全齐平):

// screen size
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    float ScrDensity = metrics.density;
    int metricHeight = metrics.heightPixels;//
    int metricWidth = metrics.widthPixels;//

    Log.i("AllMetrics", metrics.toString());

    // temp
    int rightButton_diameter = 100;
    int rightButton_xpos = metricWidth - rightButton_diameter;
    int rightButton_ypos = metricHeight - rightButton_diameter;

AllMetrics 返回的位置:

DisplayMetrics{density=2.0, width=720, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0}

我注意到返回的高度也与虚拟设备管理器(API 19,Android 4.4)中列出的 720x1280 不同,并且触摸事件的 x/y 位置似乎与绘制的元素(即按钮与绘制的位置相同)

这是配置错误还是我使用了不正确的获取屏幕位置的方法?

【问题讨论】:

  • height=1184 因为它不包括状态栏高度 96,这两个数字相加得到 1280 即物理屏幕高度
  • 顺便说一句,你到底想达到什么目的?
  • 只需准确地将内容放置在屏幕上以供初学者使用。我注意到如果我从 0,0 开始绘制,它与左上角齐平。状态栏不应该将其抵消 69 吗?否则它只是缺少底部而不是顶部的高度。
  • 我不明白你的意思,对不起
  • 大家找到合理的解决方案了吗?我也面临同样的困境。

标签: java android pixels screen-size pixel-density


【解决方案1】:

检查此代码是否适合我

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;

在活动之外你可以试试这个

 ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm)

【讨论】:

  • 我的理解是getWindowManager()不能在主Activity之外使用? (当我尝试使用它时确实返回“无法解决方法”)如果我弄错了,请道歉。这是我第一次对 Android 开发者大发雷霆。
  • 如果你想在传球活动上下文中使用外部活动...祝你好运。
  • 然后它只是作为主要活动上下文的方法访问吗?使用:this.mainActivityContext.getWindowManager().getDefaultDisplay().getMetrics(dm);返回相同的问题,getWindowManager() 未解决。
  • 我更新了请检查它的工作,我检查棒棒糖
  • 这对于 Nexus 5X 返回 1794 px,而它应该是 1920 pxmaterial.io/devices
【解决方案2】:

要访问 DisplayMetrics 成员,请像这样初始化一个对象:

DisplayMetrics 指标 = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics);

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 2020-05-21
    相关资源
    最近更新 更多