我对7英寸平板电脑(800x480px)的dp计算有些问题,下面是我的计算方法。在计算或我的想法错:7英寸平板电脑和7英寸平板电脑仿真器的DP计算问题
我有我的测试三种设备:
- 歌Nexus One:800x480px,3.7" 显示屏(specs)
- 华为Ideos手机:320x240px,2.8" 显示屏( specs)
- Ainol诺7" 片剂:800x480px,7" 显示(specs)
基于显示尺寸,我手动计算DPI(每英寸点数)的基础上,表现公式:
sqrt(w^2 + h^2)/in
所以我得到:
- Nexus之一:SQRT(800×800 + 480×480)/3.7 = 252.15dpi
- 华为的Ideos:SQRT(320 * 230 + 240×240)/2.8 = 142.86dpi
- 艾诺诺7" 片剂:SQRT(800×800 + 480×480)/ 7 = 133.28 DP
现在我想输出的屏幕的度量并且基于的dpi值其中,屏幕宽度和高度以dp(密度无关像素)表示。我的该代码是:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d(TAG, "ScaledDensity: " + metrics.scaledDensity);
Log.d(TAG, "Density DPI: " + metrics.densityDpi);
int widthInPx = 800; // 320 or 800, depending on the respective device width I'm testing
int widthInDp =(int)(widthInPx/metrics.scaledDensity);
Log.d(TAG, "width in dp: " + widthInDp);
int heightInPx = 480; // 240 or 480, depending on the respective device height I'm testing
int heightInDp =(int)(heightInPx/metrics.scaledDensity);
Log.d(TAG, "height in dp: " + heightInDp);
结果如下:
- Nexus之一: 缩放密度:1.5,密度DPI:240,宽度以dp:533,身高以dp:320
- 华为的Ideos: ScaledDensity:0.75,密度DPI:120,宽度以dp:426,高度在DP:320
- 艾诺诺7" 片剂: ScaledDensity:1.0,密度DPI:160,宽度DP:800,高度在DP:480
密度的DPI,我从Java代码让我的活动内从我的计算dpi的值不同,并且显然由Android将其舍入为120,160或240的值之一,这是非常正常的。到目前为止没有问题。
问题/问题1:
在第三装置中,所述诺7" 片剂: 的ScaledDensity据说是1.0,并且在DP的宽度被认为是800,相同但是,这不是现实;当我创建一个全屏应用程序并在那里放置一个视图时,只有533dp x 320dp的视图实际适合屏幕。所以它与Nexus One的dp测量值相同;即使Nexus One具有更高的DPI值但像素数相同。这怎么可能?
问题/问题2:
我创建一个AVD仿真器,用精确的测量作为诺7" 平板电脑 在我的Java代码的日志线显示相同的值作为真实平板设备:
- 艾诺诺7" 片剂模拟器: ScaledDensity:1.0,密度DPI:160,宽度DP:800,高度在DP:480
但是,在模拟器上,我可以使用580dp x 320 dp来放置视图以在全屏活动中完全可见。模拟器和真实设备之间的宽度dp有什么不同,并且测量结果完全相同?
问题/疑问3:
在http://developer.android.com/guide/practices/screens_support.html它说:
为了帮助您定位你的一些设计不同类型的
设备,在这里是典型屏幕宽度的一些数字:
...
480dp:类似Streak(480x800 mdpi)的tweener平板电脑。
600dp:7英寸平板电脑(600x1024 mdpi)。
...
我想我的平板电脑应属于这些类别之一的,然而,它也没有具有480宽度600也DP宽度,但介于两者之间;在我的情况下,无论是533dp(真实设备)还是580dp(模拟器)。
如果是这种情况,那么这种“典型屏幕宽度”概述会有什么好处,如果实际上并非如此,但来自不同供应商的设备之间可以有任何其他随机值标准的? 然后,我可以继续前进,并重新使用像素值,因为使用dp的全部好处似乎都不存在。
我看到了这个问题,开放,只是想补充一点的是,的minSdkVersion成为一个问题的原因缺席时,是因为[兼容模式](http://developer.android.com/guide/practices/screen-compat -mode.html) – 2012-10-03 14:23:06