3

如果您正在布置交互式触摸 UI 元素,例如按钮,您需要具有合理物理尺寸的东西,以便用户可以舒适地点击它。这样,布局触摸 UI 就像布局电子设备上的物理按钮和旋钮一样。对于这种物理工程,毫米(或英寸)是首选单位。

出于某种原因,触摸 UI 设计似乎并非如此。我不认为自己对这个主题非常了解,但老实说,我从未见过有人在例如 Android 布局文件中使用 mm 作为单位。但是我已经看到关于“px”、“dp”、“sp”以及谁知道什么的无休止的辩论。

“与设备无关的像素”(在 Android 上是根据物理长度定义的 - 1dp ≈ 0.16mm)似乎是一种非常复杂的指定长度的方式。

为什么不只使用毫米?

设备不能正确支持这些单元是否存在问题?它是一种文化的东西吗(程序员可能更习惯于用“某种像素”而不是物理单位来思考)?这是怎么回事?

4

4 回答 4

6

通常,您会发现移动可用性人员在谈论毫米。但是程序员和视觉设计师谈论与密度无关的像素或点(1 Android“DIP”= 1 iOS“点”),因为即使您可以精确地以毫米为单位指定测量值,您最终也会遇到舍入问题或半像素抗锯齿丑陋:

1mm 等于 6.3 DIP(精确度取决于屏幕的确切 DPI 值,因为倾角被量化到最接近的 120/160/240/320/480/640 dpi)。这意味着在标准 G1 风格的 160DIP 屏幕上,如果您将按钮指定为(比方说)8 毫米,那么该屏幕上将是 50.4 像素 - 祝您好运,以任何精度渲染它,或者告诉 Photoshop 结束一行正好 50.4 像素。只是四舍五入并不是一个很好的解决方案。屏幕仍然是固定的总宽度(以像素为单位),如果您(假设)布置具有特定尺寸和填充量的按钮网格,这些舍入误差会以破坏对称性的方式复杂化。

将其指定为(比方说)48DIP 要好得多,因为它可以平滑缩放:160DPI 时为 48px,HDPI (240) 时为 72px,320DPI 时为 96px(在 iOS 术语中也称为 2x),不需要小数像素渲染或舍入。

至于为什么 160DPI 像素作为与密度无关的像素的 1x 移动测量单位胜出,归咎于前几款 iPhone 和 HTC G1,它们共享该配置。

于 2013-10-22T19:49:59.587 回答
2

我认为W3C为屏幕的各种测量单位提供了一个不错的解释,并且每个单位都有优点和缺点。我也非常强烈推荐 Roman Nurik 的Density Independent Pixels 视频。虽然它不能直接回答您的问题,但它提供了很多重要的信息。

这是我对 DPs 而不是 mm 的论点:

资源

这可能是最大的一个。当设计师和开发人员创建图像或视频资产时,我们不使用物理尺寸。如果你用相机拍照,你不能说这张照片有 5 英寸高。图片的高度取决于您决定如何打印出来。

因此,如果我想向我的用户显示图像或者我想创建一个按钮图形,我不能简单地创建 10 毫米宽 x 10 毫米高的资源。该一张图像将在不同的屏幕上以不同的尺寸呈现。即使设备/代码确实将图​​像缩放到恰好 10 毫米高,它在大多数电视上看起来也会令人难以置信的像素化,并且/或者比低密度设备(例如手表)能够显示的细节更多(因此浪费设备的资源)。

那么答案就是以不同大小导出单个图像,以便它在多个设备上看起来不错。

当然,还有其他方法可以解决这个问题。矢量图形可以解决这个问题,但这是一个完全不同的话题。

DP

至于特定于 Android 的答案 - 我们会这样做。正如您所指出的,我们使用 DP 可以粗略地转换为传统的物理长度单位,例如毫米。

然而,使用 DP 与 Android 的密度桶协同工作,允许设计人员为有限的显示尺寸集创建资产。在我看来,用物理测量来标记这些桶会有点混乱,因为 4.2 英寸的手机可能在 4 英寸的桶中。

SP

SP 主要用于文本,以允许用户自定义其字体大小。一旦用户更改缩放比例,以像素或毫米为单位定义字体大小会产生误导。

于 2013-10-22T19:56:02.130 回答
0

这是因为 Android 支持许多设备尺寸和分辨率。您是否想开发一个应用程序来接受以毫米为单位测量的某些位置的触摸,并让手机和平板电脑上的位置不同?还是与低密度平板电脑尺寸相同的高密度平板电脑?甚至只是手机和平板电脑之间的高度/宽度比差异。

毫米是一种硬测量,它反映了现实生活中的距离,但不反映像素的数量。“dp”和“sp”等单位既考虑了像素,也考虑了大小

于 2013-10-22T19:34:42.320 回答
0

使用 sp/dp 将使您的 Android 应用程序兼容多种屏幕密度和分辨率

在您的应用布局与分辨率无关的 mm 中,这是不可能的。

于 2013-10-22T20:09:29.600 回答