为什么在XXX_active
(声明为here)的javadocs中声明它不应该用于设置布局尺寸?
答案 0 :(得分:4)
我们不使用像素来定义布局尺寸。使用密度独立像素可确保在各种设备上正确布局尺寸。意思是所说的布局在4英寸手机和7英寸平板电脑上具有大致相同的视觉尺寸。 (这与手头的问题完全无关:))
据说实际的布局大小(例如LayoutParams
类)实际上是使用整个像素来定义结果大小。以这种方式使用dpToPixels
方法是可行的:
float px = dpToPixels(16, getResources()); // 16 dp to pixels precise
int pxOffset = (int) px; // 16dp rounded down to whole pixels
int pxSize = (int) (0.5f + px); // 16dp rounded up to whole pixels
现在你可以在布局中使用这些值, pxOffset
用于填充,边距等(可以为零)和pxSize
用于宽度和高度(确保至少1px大小,除非为零) 即可。使用适用于布局的方法int Resources.getDimensionPixelOffset(int)
和int Resources.getDimensionPixelSize(int)
以及适合精确绘制的float Resources.getDimension(int)
时,可以进行相同的计算。
高程使用float
值,因此使用精确尺寸完全没问题。
TranslationX,translationY或translationZ是使用float
值定义的。这些和更多视图属性用于动画,因此使用平滑值是有意义的。如果手动设置,则使用整数来表示可预测的行为。
答案 1 :(得分:1)
px 像素 - 每个比例的点数对应于屏幕上的实际像素。
dp 与密度无关的像素 - 基于屏幕物理密度的抽象单位。这些单位相对于160 dpi的屏幕,因此一个dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随着屏幕密度而变化,但不一定成正比。注意:编译器同时接受" dip"和" dp",虽然" dp"更符合" sp"。
对于1920 * 1080,1440 * 960的屏幕,很容易理解px
是什么......但density
中有Android
概念。
**px = density*density**
。
作为Android开发人员,我们都知道Android Fragmentation Problem
。 Google建议我们使用dip
来布局我们的观看,而不是px
。但有时我们必须使用px
。所以,我们需要这种转换。
PS:PX
和DP
不同但相似。
DP
是分辨率。当您使用DP
时,它会将您的布局缩放到具有不同pixel
密度的其他类似大小的屏幕。
有时你实际上想要pixel
,当你处理代码中的维度时,你总是处理真实的像素,除非你转换它们。
所以在Android设备上,正常大小的hdpi
屏幕,800x480在DP中是533x320(我相信)。要将DP转换为像素/1.5,要转换回* 1.5。这仅适用于一个屏幕尺寸和dpi
,它会根据设计而改变。我们的艺术家给了我像素,然后用上面的1.5等式转换成DP。