如何获得设备的屏幕尺寸?

时间:2011-07-27 07:33:20

标签: android view screen screen-size inches

欲望有480 x 800像素,3.7英寸,HD有480 x 800像素,4.3英寸屏幕规格。

我从这个帖子How to get screen size of device?运行被接受为答案的代码,但这是错误的!例如,对于3.7英寸的屏幕尺寸,返回2.4这是非常错误的!

有人知道如何获得真正的屏幕尺寸吗?我不需要分辨率我需要以英寸为单位的屏幕尺寸。

注意:此代码错误(至少对我不起作用)

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //give me 320
int height = dm.heightPixels; //give me 533

我有HTC Desire,我的分辨率为480 x 800像素!

我知道我很蠢! ,显然我做错了什么但是有人可以请我如何以英寸为单位获得真正的屏幕尺寸,并获得设备的真实分辨率?

由于

4 个答案:

答案 0 :(得分:15)

好的,我终于找到了我的问题

是的,这段代码工作正常,但我没有返回像素,它返回DIP(密度无关像素),这是不一样的!

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

我需要的是REAL像素,它们的计算如下:

int widthPix = (int) Math.ceil(dm.widthPixels * (dm.densityDpi / 160.0));

现在widthPix是480!

答案 1 :(得分:8)

我找到了你的问题,这让我想知道为什么我肯定没有在我正在开发或测试的任何设备上看到这种效果... getWidth()/ getHeight()返回可用屏幕的确切范围。我怀疑其他人也会在这里结束,添加导致更多混淆的代码而不理解根本原因。

如果您明确禁用预缩放 ,请参阅the second bullet point of this document。 (谷歌快速搜索“320x533”这个术语会让很多其他人遇到过这种情况。)摆脱你的预缩放,差异应该消失(getWidth()/ getHeight()会返回< em>实际大小,而不是缩放大小。

对于平板电脑开发人员的注意事项:getWidth()/ getHeight()不会返回原始屏幕尺寸,因为底部栏(48像素左右)不是应用可以绘制的区域的一部分。您将获得可以绘制的所有内容的大小(例如,1280x752而不是横向模式下的完整1280x800)。同样,没有预先缩放意味着这些值是准确和准确的。

答案 2 :(得分:0)

尝试使用Display课而不是DisplayMetrics

Display dispOb = getWindowManager().getDefaultDisplay();
String widthAndHeight= dispOb.getWidth()+"X"+dispOb.getHeight();

答案 3 :(得分:0)

通过将此行添加到清单文件来禁用预缩放:

<supports-screens android:anyDensity="true" />

位置:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="...."
  android:versionCode="1"
  android:versionName="1.0">

<supports-screens android:anyDensity="true" />

<application android:label="@string/app_name" >
...