在7“平板电脑和7”平板电脑仿真器上进行DP计算问题

时间:2012-02-02 11:03:45

标签: android dpi android-screen density-independent-pixel

我在7英寸平板电脑(800x480px)的dp计算方面遇到了一些问题。以下是我的计算方法。无法找到我在计算或我的想法中出错的地方:

我正在测试三种设备:

  1. Nexus One:800x480px,3.7“显示屏(specs
  2. 华为Ideos:320x240px,2.8“显示屏(specs
  3. Ainol Novo 7“平板电脑:800x480px,7”显示屏(specs
  4. 根据显示尺寸,我根据公式手动计算DPI(每英寸点数):

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

    所以我得到了:

    1. Nexus One:sqrt(800 * 800 + 480 * 480)/3.7 = 252.15dpi
    2. 华为Ideos:sqrt(320 * 230 + 240 * 240)/2.8 = 142.86dpi
    3. Ainol Novo 7“平板电脑:sqrt(800 * 800 + 480 * 480)/ 7 = 133.28 dp
    4. 现在我想输出屏幕指标的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 One:     比例密度:1.5,密度DPI:240, dp中的宽度:533,dp中的高度:320
      2. 华为Ideos:     ScaledDensity:0.75,密度DPI:120,宽度,dp:426,高度,dp:320
      3. Ainol Novo 7“平板电脑:     ScaledDensity:1.0,密度DPI:160,宽度,dp:800,高度,dp:480
      4. 我从我的活动中的java代码中获得的密度DPI与我计算的dpi值不同,并且显然由Android将其舍入到值120,160或240中的一个,这是很正常的。到目前为止没问题。

        问题/问题1:

        使用第三台设备,Novo 7“平板电脑: ScaledDensity据说是1.0,而 dp的宽度据说是800 ,与px的数量相同。然而,这不是现实;当我创建一个全屏应用并在那里放置一个视图时,只有533dp x 320dp的视图实际上适合屏幕。所以它与Nexus One的dp测量值相同;即使Nexus One具有更高的DPI值但像素数相同。怎么可能?

        问题/问题2:

        我为模拟器创建了一个AVD,其精确的测量结果为Novo 7“平板电脑。 我的java代码中的日志行显示的值与真正的平板电脑设备相同:

        1. Ainol Novo 7“平板电脑模拟器:     ScaledDensity:1.0,密度DPI:160,宽度,dp:800,高度,dp:480
        2. 但是,在模拟器上,我可以放置一个 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的整个好处似乎都没有。

1 个答案:

答案 0 :(得分:2)

唉,我只是忘记了这句话

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

在我的清单中。

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