Android getDisplayMetrics()没有返回准确的显示大小

时间:2016-07-23 14:01:27

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

我试图获取设备的像素宽度/高度以放置元素并在屏幕上映射触摸事件但没有获得所需效果(注意右下方应该与右下方完全齐平):

White square should be flush in the lower right corner

// 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位置对于绘制的元素(即可点击的区域)似乎是准确的。按钮与绘制的位置相同)

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

2 个答案:

答案 0 :(得分:2)

检查此代码对我有用

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

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

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

答案 1 :(得分:0)

要访问DisplayMetrics成员,请初始化如下对象:

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