9

我是平板电脑应用程序开发的新手。我有具有屏幕分辨率(600 * 960 dip)的 Google Nexus7 所以我想知道它是否属于 mdip 类别?根据那个 1px = 1dp(基线)。但如果我按照这个在平板电脑上看起来不太好。我正在为 nexus7 创建单独的布局文件夹,-sw600dp并根据 mdip 提及尺寸,但它不起作用。我的图像也不好看。我想知道 google nexus 7 的实际转化率是多少。需要帮助。

4

3 回答 3

14

公式:pixels = dips * (density / 160)

Nexus 7 为 800x1280,密度为 213 像素,这意味着它的分辨率代码是tvdpi(这意味着您可以拥有一个名为 的文件夹drawable-tvdpi)。

您可以通过以下方式测量可用的屏幕尺寸,减去窗口装饰:

this.getResources().getConfiguration().screenWidthDp;
this.getResources().getConfiguration().screenHeightDp;

在我的 N7 上,它返回 600 dp w、888 dp h。按照上面的公式,888 dp 的高度是 1280px - 窗口装饰。

于 2013-10-08T04:50:37.463 回答
4

Nexus7 是一款独特的设备,具有有点奇怪的 dpi 结构。

对于关系 7

layout-large-hdpi

这是一个很好的解释(来自谷歌的 Android 工程师 Dianne Hackborn): Dianne Hackborn 解释了 Nexus7 的独特分辨率

注意:只有在您没有提供更高优先级限定符的情况下,应用才会从这些文件夹中获取图像。例如,如果您提供了一个布局文件夹,例如 layout-sw360dp,即使您提供了像我上面所说的那样的单独布局,应用程序也只会从该文件夹中获取图像。因为在android中有一个优先顺序,你必须给出布局。

屏幕密度

通常称为 dpi(每英寸点数)。Android 将所有实际屏幕密度分为四种广义密度:低 (120)、中 (160)、高 (240) 和超高 (320)。Galaxy Nexus 等设备具有“超高”屏幕密度(更具体地说,dpi 值设置为 320)。Nexus 7 使用“tvdpi”——即 213 dpi。

密度无关像素

通常称为dp。这是显示内容时使用的虚拟像素单位。与密度无关的像素相当于 160 dpi 屏幕上的一个物理像素。要计算 dp,请使用以下公式:

px = dp * (dpi / 160)

或等效地:

dp = (px / dpi) * 160

尽管分辨率相似,但 Nexus 7 可以显示比 Galaxy Nexus 更多的内容的原因是:Nexus 7 的 dpi 低于 Galaxy Nexus

Galaxy Nexus(320 dpi,720 像素宽)

(720 / 320) * 160 = 360 dp

Nexus 7(213 dpi,800 像素宽)

(800 / 213) * 160 = 600 dp

这意味着当应用在 Galaxy Nexus 上渲染时,屏幕的宽度实际上是 360 dp(使用 720 像素渲染)。而在 Nexus 7 上,屏幕宽度为 600 dp(使用 800 像素渲染)。

于 2013-10-08T05:12:00.670 回答
1

试试下面的代码,给下面的方法提供像素值,它会给你结果 dp。

public int convertSizeToDeviceDependent(int value) {
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            return ((dm.densityDpi * value) / 160);
        }
于 2013-10-08T05:19:45.210 回答