8

愿望有 480 x 800 像素,3.7 英寸和高清有 480 x 800 像素,4.3 英寸屏幕规格。

我运行的代码被接受为这个线程的答案如何获取设备的屏幕尺寸?但这是错误的!例如对于 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

4 回答 4

16

好的最后我发现了我的问题

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

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

我需要的是真实像素,它们的计算是这样的:

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

现在 widthPix 是 480 !

于 2011-07-27T08:16:06.273 回答
8

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

事实证明,如果您明确禁用预缩放,这正是发生的情况请参阅本文档的第二个要点。(在“320x533”这个词上的快速谷歌搜索出现了很多其他人遇到过这个问题。)摆脱你的预缩放,差异应该消失(getWidth()/getHeight()然后会返回实际大小,而不是缩放的大小。

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

于 2011-10-21T13:55:16.480 回答
0

尝试使用Displayclass 而不是DisplayMetrics.

Display dispOb = getWindowManager().getDefaultDisplay();
String widthAndHeight= dispOb.getWidth()+"X"+dispOb.getHeight();
于 2012-07-14T11:06:46.163 回答
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" >
...
于 2013-12-21T09:51:11.800 回答