2016-07-23 34 views
2

我试图获取设备的像素宽度/高度用于放置元件和映射的触摸事件在屏幕上,但没有得到所期望的效果(注意右下方应该是完全的Android getDisplayMetrics()没有返回准确的显示尺寸

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} 

我注意到,换货政右底部)齐平rned高度也从在虚拟设备管理器(API 19,机器人4.4)和触摸事件的X/Y位置列出的720x1280不同似乎精确到绘制的元素(即按钮的点击区域是一样的,其中它被画)

这是一个配置错误或正在使用获取屏幕位置的不正确的方法吗?

+1

高度= 1184,因为它不包括状态栏的高度是96,这两个数字加在一起给1280是物理屏幕高度 – pskink

+0

BTW究竟你想达到什么目的? – pskink

+0

只需准确地将东西放置在屏幕上为初学者。 我注意到,如果我从0,0开始绘制,它与左上角齐平。状态栏不应该抵消69?否则,它只是缺少底部而不是顶部的高度。 – Gavin

回答

2

检查这个代码工作对我来说

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

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

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

我的理解是getWindowManager()不能在主Activity之外使用吗? (事实上​​返回“无法解析法”,当我尝试使用它),如果我错了 道歉。这是我第一次进入Android开发。 – Gavin

+1

如果你想使用外部活动的传递活动的上下文...祝你好运。 –

+0

然后只是作为主要活动上下文的方法进行访问吗?使用: this.mainActivityContext.getWindowManager()。getDefaultDisplay()。getMetrics(dm);返回相同的问题,getWindowManager()未解决。 – Gavin

0

要访问DisplayMetrics成员初始化一个对象是这样的:

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

+1

这在主Activity之外不起作用。 – Gavin