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

标签 android android-layout

为什么在 dpToPixel(声明为 here)的 javadocs 中声明它不应该用于设置布局尺寸?

最佳答案

我们不使用像素来定义布局尺寸。使用与密度无关的像素 可确保在各种设备上实现适当的布局尺寸。这意味着所述布局在 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 大小,除非为零)。使用适用于布局和 float 资源的 int Resources.getDimensionPixelOffset(int)int Resources.getDimensionPixelSize(int) 方法时,会进行相同的计算.getDimension(int) 适用于精确绘图。

编辑

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

TranslationX、translationY 或 translationZ 是使用 float 值定义的。这些和更多 View 属性用于动画,因此使用平滑值是有意义的。如果手动设置,则使用整数来实现可预测的行为。

关于android - 为什么不应该使用 dpToPixel 来设置布局尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30300379/

相关文章:

android - Xamarin.Auth 的 OAuth1Authenticator 未终止未完成

android - 是否可以在 Android 中使用 URL 而不是 SDK 将图像上传到 firebase 存储?

android - 如何为 10"以下的选项卡自定义应用程序首选项屏幕(双 Pane 布局)

java - 使用 SQLite 从 ListView 中删除项目

java - 按下主页按钮时 Android 应用程序崩溃但方向更改正常

android - 更改开关的 "on"颜色

android - 屏幕的实际 dpi 范围是多少?

Android: RelativeLayout inside FrameLayout, width height 错误

Android同步(我认为)

android - 使用按钮旋转相对布局 - 触摸事件区域不旋转