我有XHDPI中指定的屏幕。
我必须将dp
的所有padding,margin值转换为LDPI
,MDPI
,HDPI
,XXHDPI
,XXXHDPI
谁能建议我如何计算以下屏幕的dp
值,假设我在paddingTop
中的xhdpi
是56dp
,那么我们给ldpi
,mdpi
,xxhdpi
和xxxhdpi
请建议我。
最佳答案
密度无关像素(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文件夹。