为什么不应该使用dpToPixel来设置布局尺寸?

5
为什么在 dpToPixel 的 javadocs(声明于这里)中指出不应该使用它来设置布局尺寸?
1个回答

6
我们不使用像素来定义布局尺寸。使用“密度无关像素”可确保在各种设备上具有适当的布局尺寸。这意味着所说的布局在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(除非为零,否则至少保证为1像素)。当使用方法int Resources.getDimensionPixelOffset(int)int Resources.getDimensionPixelSize(int)时,会进行相同的计算,适用于布局,float Resources.getDimension(int)适用于精确绘制。

编辑

高程使用float值,因此使用精确尺寸完全没有问题。

TranslationX、translationY或translationZ使用float值定义。这些以及许多其他的视图属性用于动画处理,所以使用平滑的值是有意义的。如果手动设置,请使用整数以获得可预测的行为。


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