Google nexus 7从px转换为dp

时间:2013-10-08 04:39:43

标签: android nexus-7

我是平板电脑应用程序开发的新手。我有谷歌Nexus7屏幕分辨率(600 * 960倾角)所以我想知道它是否属于mdip类别? 根据1px = 1dp(基线)。但是,如果我遵循它,它在平板电脑上看起来不太好。我正在为nexus7 -sw600dp创建单独的布局文件夹,并根据mdip提及大小,但它不起作用。我的照片也不好看。我想知道什么是google nexus 7的实际转换率。需要帮助。

3 个答案:

答案 0 :(得分:13)

公式: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 - 窗饰。

答案 1 :(得分:3)

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

对于nexus 7

layout-large-hdpi

以下是一个非常好的解释(来自Google的Android工程师Dianne Hackborn):Dianne Hackborn explains the unique resolution of the 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像素渲染)。

答案 2 :(得分:1)

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

public int convertSizeToDeviceDependent(int value) {
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            return ((dm.densityDpi * value) / 160);
        }