我有XHDPI中指定的屏幕。

我必须将dp的所有padding,margin值转换为LDPIMDPIHDPIXXHDPIXXXHDPI

谁能建议我如何计算以下屏幕的dp值,假设我在paddingTop中的xhdpi56dp,那么我们给ldpimdpixxhdpixxxhdpi

请建议我。

最佳答案

密度无关像素(dp)


  在定义UI布局时应使用的虚拟像素单位,以密度独立的方式表示布局尺寸或位置。
  与密度无关的像素等效于160 dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理dp单位的任何缩放比例。 dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。例如,在240 dpi屏幕上,1 dp等于1.5物理像素。定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI。


如果您想知道xhdpi中的56dp,那么ldpi,mdpi,hdpi,xxhdpi,xxxhdpi中的56dp也是如此-顾名思义,它是与密度无关的像素。

当您使用设计时,您想知道一件事:

设计的基准规模是多少?

快速解答:通常为1倍,2倍或在极少数情况下为3倍

Android定义了以下密度:


ldpi(低)〜120dpi
mdpi(中)〜160dpi
hdpi(高)〜240dpi
xhdpi(超高)〜320dpi
xxhdpi(超高)〜480dpi
xxxhdpi(超高)〜640dpi


中间有一些罕见的情况,例如tvdpi,但是在99%的情况下,您可以简单地忽略这些情况。

当设计师说1x时,他们通常指的是mdpi,2x(或视网膜)指的是xhdpi,而3x设计是在xxhdpi中完成的。

知道基线后,就知道如何将设计文档中的像素值转换为dip(与密度无关的像素)。

公式很简单,但是如果您怀疑自己,可以随时尝试使用一种在线转换器工具:


https://pixplicity.com/dp-px-converter
http://angrytools.com/android/pixelcalc/


公式如下:dp = px /(dpi / 160)其中dpi是当前屏幕密度,而px是基本(1x)密度值。

other way around

另外,请记住阅读Android开发者页面上的Best Practices



如果仍然不建议在尺寸文件中使用px,请查看this answer以了解如何为不同的屏幕创建不同的value文件夹。

10-08 16:21