2012-02-02 137 views
2

我对7英寸平板电脑(800x480px)的dp计算有些问题,下面是我的计算方法。在计算或我的想法错:7英寸平板电脑和7英寸平板电脑仿真器的DP计算问题

我有我的测试三种设备:

  1. 歌Nexus One:800x480px,3.7" 显示屏(specs
  2. 华为Ideos手机:320x240px,2.8" 显示屏( specs
  3. Ainol诺7" 片剂:800x480px,7" 显示(specs

基于显示尺寸,我手动计算DPI(每英寸点数)的基础上,表现公式:

sqrt(w^2 + h^2)/in 

所以我得到:

  1. Nexus之一:SQRT(800×800 + 480×480)/3.7 = 252.15dpi
  2. 华为的Ideos:SQRT(320 * 230 + 240×240)/2.8 = 142.86dpi
  3. 艾诺诺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); 

结果如下:

  1. Nexus之一: 缩放密度:1.5,密度DPI:240,宽度以dp:533,身高以dp:320
  2. 华为的Ideos: ScaledDensity:0.75,密度DPI:120,宽度以dp:426,高度在DP:320
  3. 艾诺诺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有什么不同,并且测量结果完全相同?

    enter image description here

    问题/疑问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的全部好处似乎都不存在。

    回答

    2

    哎呀,我根本都忘了行

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11" /> 
    

    在我的清单。

    没有android:minSdkVersion,总是有问题;我认为Android 1.5的遗留问题。

    +0

    我看到了这个问题,开放,只是想补充一点的是,的minSdkVersion成为一个问题的原因缺席时,是因为[兼容模式](http://developer.android.com/guide/practices/screen-compat -mode.html) – 2012-10-03 14:23:06

    相关问题