X dpi和屏幕宽度、比例等之间的区别是什么?

3

制作自定义设备配置时,我对于x dpi、y dpi、屏幕宽度、屏幕高度、比例和密度都感到有些困惑。这是我在实际设备配置中找到的唯一信息:240 x 320像素,2.8英寸(~143 ppi像素密度)。我该如何获取以下信息来为我的自定义设备进行配置 -

x dpi= ?
y dpi = ?
screen width=240
screen height=320
ratios=?
density=?
screen size=2.8 inch (diagonal)

根据开发者指南 - enter image description here
1个回答

2

对我来说,这也有点令人困惑。但是在不同的设备上运行这些函数后,我掌握了它,并且现在对我来说一切都很清楚。希望这也能帮助到你。

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    int height = metrics.heightPixels;
    int width = metrics.widthPixels;

//注意:上述公式提供以下数值: 三星Galaxy sIII:720 * 1280 三星4g LTE平板电脑:800乘以1232
因此,您可能会想知道两个设备为什么几乎具有相同的高度。但这不是它的工作原理。 您必须使用下面的“convertPixelsToDp”函数来获取实际dp。
      public static float convertPixelsToDp(float px,Context context)
     {
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float dp = px / (metrics.densityDpi / 160f);
        return dp;

     }

使用此公式后,三星Galaxy SIII 的分辨率将为 360 x 640。

 //To convert dp back to pixel
 public static float convertDpToPixel(float dp,Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float px = dp * (metrics.densityDpi/160f);
        return px;
    }


    //This will give you ratio
    // For Samsung Galaxy sIII : ratio is 2 (320/160)
    float d = getApplicationContext().getResources().getDisplayMetrics().density;


    // will either be DENSITY_LOW, DENSITY_MEDIUM or DENSITY_HIGH
    //For Samsung Galaxy sIII : 320 dpi
    int dpiClassification = metrics.densityDpi;

SiGH....还是太难了。我想知道有多少人真正懂得这些。我应该在模拟器上尝试这段代码吗?X DPI和屏幕宽度之间有什么区别? - Tanvir
不,你应该在不同屏幕尺寸的设备上尝试上述公式,这些设备具有不同的密度。一旦你看到这些值,你就会知道理解它有多容易。dpi是密度,即100、200、300..这意味着你将拥有每英寸100个点..宽度将根据dpi给出像素..例如:三星Galaxy S3屏幕宽度为720像素..现在将其转换为dp,即720/(320/160)..这比实际像素要小..我强烈建议你观察不同设备给出的值..如果仍然不清楚,请告诉我。 - Shikha Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接