2012-08-29 176 views
2

是否可以计算以英寸为单位的android屏幕对角线尺寸。计算android屏幕大小?

我在下面试过两种方法都不适合我的情况。

方法1:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
int absoluteHeightInPx = displayMetrics.heightPixels; 
int absoluteWidthInPx = displayMetrics.widthPixels;  
double diagonalPixels = Math.sqrt((absoluteHeightInPx * absoluteHeightInPx) + (absoluteWidthInPx * absoluteWidthInPx)); 
double diagonalInInches = diagonalPixels/displayMetrics.densityDpi; 

方法2:

float actualHeight = absoluteHeightInPx * deviceDensity; 
float actualWidth = absoluteWidthInPx * deviceDensity; 
float deviceDensity = displayMetrics.density; 
float physicalPixelPerInchX = displayMetrics.xdpi; 
float physicalPixelPerInchY = displayMetrics.ydpi; 
float heightInInches = actualHeight/physicalPixelPerInchY; 
float widhtInInches = actualWidth/physicalPixelPerInchX; 
double diagonalInInches = Math.sqrt((heightInInches * heightInInches) + (widhtInInches * widhtInInches)); 

你能改正,如果我错了。

感谢, Easwar

+0

http://stackoverflow.com/questions/2193457/IS-有-A-方式对确定功能的Android物理屏幕,他ight-in-cm-or-inches – javanut13

+0

我已经看过链接了。但这不适合我。我在某些设备上进行了测试。我没有得到完美的答案。请帮帮我。 –

+0

你使用什么设备? – VendettaDroid

回答

0

我已经测试了两个我在8台Android设备的方法。第二是几乎准确。

但对于一些设备,这是不给予适当的回答。所以我总结以下第二种方法。

7

我用下面的代码,和它的作品在我的摩托戴伊。

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

    float height=metrics.heightPixels/metrics.xdpi; 
    float width=metrics.widthPixels/metrics.ydpi; 

    TextView tv=(TextView) findViewById(R.id.textview); 
    tv.setText("The screen size is:"+FloatMath.sqrt(height*height+width*width)); 

真正的对角线长度为3.7" ,代码给出了3.6979072,足够精确。根据SDK中的描述,我觉得我的方法应该在其他设备上工作。

+0

感谢,酷的方法:D –

+0

其实你必须乘以heightPixels和widhtPixels密度的屏幕。如果密度= 1,上述推导将是正确的。我认为您的设备的密度为1.右? –

+0

SDK文档说xdpi是X维中每英寸的物理像素数,而heightPixels是以像素为单位的绝对高度,因此将其除以xdpi应得到X维中以英寸为单位的物理长度。这就是我如何考虑你的问题。我不认为密度在这里。顺便说一句,我的设备密度为1.5 – Huang