Android 为什么不';t用于触摸界面布局的标准物理长度单位,如mm?

Android 为什么不';t用于触摸界面布局的标准物理长度单位,如mm?,android,touch,ui-design,Android,Touch,Ui Design,如果你正在布置一个交互式触摸UI元素,比如一个按钮,你需要一个物理尺寸合理的东西,这样用户就可以轻松地点击它。通过这种方式,布置触摸UI就像布置电子设备上的物理按钮和旋钮。对于这种物理工程,毫米(或英寸)是选择的单位 出于某种原因,触摸屏UI设计中似乎并非如此。我不认为自己在这个主题上读得很好,但我从来没有见过任何人把MM作为一个单元,比如说Android布局文件。但我看到了关于“px”与“dp”与“sp”与谁知道是什么的无休止的争论 “设备独立像素”(Android上的物理长度为1dp)≈ 0

如果你正在布置一个交互式触摸UI元素,比如一个按钮,你需要一个物理尺寸合理的东西,这样用户就可以轻松地点击它。通过这种方式,布置触摸UI就像布置电子设备上的物理按钮和旋钮。对于这种物理工程,毫米(或英寸)是选择的单位

出于某种原因,触摸屏UI设计中似乎并非如此。我不认为自己在这个主题上读得很好,但我从来没有见过任何人把MM作为一个单元,比如说Android布局文件。但我看到了关于“px”与“dp”与“sp”与谁知道是什么的无休止的争论

“设备独立像素”(Android上的物理长度为1dp)≈ 0.16mm)似乎是一种非常复杂的指定长度的方法

为什么不用毫米呢


设备不能正确支持这些装置是否有问题?这是一种文化现象吗(程序员可能更习惯于用“一些像素”而不是物理单位来思考)?这是怎么回事?

这是因为Android支持多种设备尺寸和分辨率。您是否希望开发一款应用程序,在mm测量的特定位置接受触摸,并使手机和平板电脑上的位置有所不同?还是与低密度片剂大小相同的高密度片剂?甚至仅仅是手机和平板电脑之间的高宽比差异


毫米是一个很难测量的指标,它反映了现实生活中的距离,但不是像素的数量。像“dp”和“sp”这样的单位考虑了像素和大小

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

1mm等于6.3 DPI(精度取决于屏幕的准确DPI值,因为DIP被量化到120/160/240/320/480/640 DPI的最接近值)。这意味着在一个标准的G1风格160DIP屏幕上,如果你指定一个按钮为(比如)8mm,那么屏幕上的像素数应该是50.4——祝你好运,以任何程度的精度渲染,或者告诉Photoshop精确到50.4px结束一行。仅仅四舍五入并不是一个很好的解决方案;屏幕的总宽度(以像素为单位)仍然是固定的,如果(比方说)用特定的大小和填充量布置按钮网格,那么这些舍入错误将以破坏对称性的方式加剧

指定as(比方说)48DIP更好,因为它可以平滑缩放:160DPI时48px,HDPI(240)时72px,320DPI时96px(iOS术语中称为2x),无需分数像素渲染或舍入

至于为什么160DPI像素在密度无关像素的1x移动测量单位中胜出,可以归咎于前几款iPhone和HTC G1,它们都有相同的配置。

我认为屏幕有不同的测量单位,每个都有优缺点。我也非常推荐罗曼·努里克。虽然它不能直接回答你的问题,但它提供了很多有用的信息

以下是我支持DPs而不是mm的论点:

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

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

然后,答案是导出不同大小的单个图像,以便它在多个设备上看起来很好

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

数据处理 至于一个特定于Android的答案——我们有点像。正如您所指出的,我们使用DP,它可以粗略地转换为传统的物理长度单位,如mm

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

服务提供商 SP主要用于文本,允许用户自定义字体大小。一旦用户改变缩放比例,以像素或mm为单位定义字体大小将产生误导。

使用sp/dp 会让你 Android应用程序 兼容 多屏 密度和 决议

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

dp是现实生活中的距离。参见相关链接。它更接近于现实生活中的距离;见我下面的答案。DIP是量化的,而不是基于屏幕的精确DPI值。但Martin在整体观点上是错误的:DIP根本不考虑物理屏幕大小,只考虑密度。也就是说,无论屏幕是3英寸还是10英寸,如果面板正好是320DPI,则两个显示器上都有一个指定为160DIP=320PX=1英寸的按钮。但是如果面板是360DPI,那么160DIP按钮实际上会呈现0.88英寸,因为Android仍然认为这是一个XHDPI显示,而不是一些分数变体。量化的东西一定在某一页上我没看