2

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

我正在测试三种设备:

  1. Nexus One:800x480 像素,3.7 英寸显示屏(规格
  2. 华为 Ideos:320x240 像素,2.8 英寸显示屏(规格
  3. Ainol Novo 7" 平板电脑:800x480px,7" 显示屏(规格

根据显示尺寸,我根据公式手动计算 DPI(每英寸点数):

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

所以我得到:

  1. Nexus One:sqrt(800*800+480*480)/3.7 = 252.15dpi
  2. 华为理念:sqrt(320*230+240*240)/2.8 = 142.86dpi
  3. Ainol Novo 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 One:缩放密度:1.5,密度 DPI:240,dp 宽度:533,dp 高度:320
  2. 华为 Ideos:ScaledDensity:0.75,Density DPI:120,dp 宽度:426,dp 高度:320
  3. Ainol Novo 7" 平板电脑:ScaledDensity:1.0,Density DPI:160,dp 宽度:800,dp 高度:480

我从活动中的 java 代码获得的密度 DPI 与我计算的 dpi 值不同,并且显然被 Android 舍入为值 120、160 或 240 之一,这很正常。到目前为止没有问题。

问题/问题1:

使用第三个设备,Novo 7" 平板电脑:据说 ScaledDensity 是 1.0,据说 dp 中的宽度是 800,与像素数相同。但是,事实并非如此;当我创建全屏应用程序时并在那里放置一个视图,实际上只有 533dp x 320dp 的视图适合屏幕。所以它与 Nexus One 的 dp 测量值相同;即使 Nexus One 具有更高的 DPI 值但像素数相同。如何那可能吗?

问题/问题2:

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

  1. Ainol Novo 7" 平板电脑模拟器:ScaledDensity: 1.0, Density DPI: 160, width in dp: 800, height in dp: 480

但是,在模拟器上,我可以放置一个580dp x 320 dp 的视图,以便在全屏活动中完全可见。仿真器和具有完全相同测量值的真实设备之间的宽度 dp 怎么可能不同?

在此处输入图像描述

问题/问题 3:

http://developer.android.com/guide/practices/screens_support.html它说:

帮助您针对不同类型的一些设计

设备,以下是一些典型屏幕宽度的数字:

...

480dp:像 Streak (480x800 mdpi) 这样的补间平板电脑。

600dp:7 英寸平板电脑 (600x1024 mdpi)。

...

我认为我的平板电脑应该属于这些类别之一,但是,它既没有 480 宽度也没有 600 dp 宽度,而是介于两者之间;就我而言,是 533dp(真实设备)或 580dp(模拟器)。

如果是这种情况,那么这样的“典型屏幕宽度”概述有什么好处,如果实际上似乎并非如此,但来自不同供应商的设备可以在标准设备之间有任何其他随机值?然后我可以继续使用像素值,因为使用 dp 的全部好处似乎不存在。

4

1 回答 1

2

啊,我只是忘记了线路

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

在我的清单中。

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

于 2012-02-02T12:26:45.873 回答