M-W*_*eEh 4 android android-layout
文档明确说明并且mm与in屏幕大小有关.
mm
毫米 - 基于屏幕的物理尺寸.in
Inches - 基于屏幕的物理尺寸.
但当我使用它们时,Lint说:
避免使用"mm"作为单位(它不能在所有设备上准确工作); 请改用"dp"
文档错了吗?为什么Lint在使用时不会发出警告pt?
PT
点-基于屏幕的物理尺寸为1/72英寸.
nib*_*ius 13
为了能够对您的问题给出一个好的答案,我首先要解释一下DPI在Android中是如何工作的,所以这个答案有点长.
TL; DR:文档是正确的,但Lint的警告也是正确的.那是有一些(错误?)设备在哪里mm,in并且pt无法正常工作.
在Android中,可以从DisplayMetrics类访问两种不同的密度度量:
的dp单元是基于densityDpi度量而计算出的mm,in和pt单元全部基础计算的xdpi/ydpi代替.
根据他们为densityDpi和xdpi/ydpi报告的值,可以将设备划分为四个不同的类别:
示例设备:三星Galaxy Trend,Nexus 4,Nexus 7.
对于这些设备,如果你使用,或in,它并不重要.如果你绘制一个带有边和一个边的正方形,它们将是相同的,并且在实际屏幕上都将是大约1英寸.mmdp1 in160 dp
第2类示例设备: HTC One S,Sony Xperia V,Sony Xperia Z Ultra.
3类示例设备:三星Galaxy S4,索尼Xperia Z1,Nexus 5.
对于这些设备,densityDpi和xdpi/ydpi不同,因为densityDpi必须设置为可用密度桶之一.因此,真实的物理dpi被舍入以匹配最近的桶,这是报告为densityDPI值.图1在Supporting Multiple Screens文档中对此进行了说明.
这意味着如果你绘制一个带边1 in和一边的正方形,160 dp它们的尺寸会略有不同.对于2类设备,160 dp方块将略小,而对于3类设备,它将略微更大.如果您拿出一把尺子并在手机屏幕上物理测量方块,您会看到1 in方形是1英寸,而160 dp方形根据类别稍微或更大.
这是Android中密度桶系统的自然结果,但除非您对其工作原理有更深入的了解,否则使用固定dp度量绘制的内容在不同的手机上看起来可能会有所不同.
示例设备:三星Galaxy Mini,三星Galaxy S3 Mini.
这些设备更有问题,它们对densityDpi有很好的价值(它们的真实dpi四舍五入到最近的桶),但是它们报告了xdpi/ydpi的伪值.
例如,三星Galaxy S3 Mini报告xdpi为160,densityDpi为240.屏幕宽480像素,因此如果160 dpi是正确的,这将意味着屏幕宽度为3英寸,但实际上屏幕为2.05英寸.根据这些数字,手机应报告的实际xdpi值为234.
另一个例子是三星Galaxy Mini,它也报告xdpi为160,但是DensDpi设置为120.该屏幕宽240像素,因此物理宽度为1.5英寸,但实际屏幕为1.9英寸(实际xdpi) 126).
因此,在这些类型的设备上,不可能信任in,mm,pt单位,因为它们会导致事物太小或太大.

这是我在1类,2类和3类设备上拍摄的测试应用程序的三个屏幕截图.绿色方块根据使用xdpi和ydpi值绘制为1英寸大,而红色方块绘制为1英寸大使用dp(160 dp).
当用尺子物理测量结果时,所有这些示例中的绿色正方形都是一英寸大,而红色正方形尺寸有所不同,因为它在屏幕截图上可见.

这是来自类别4设备的屏幕截图.绿色和红色方块与前面的例子相同,但在这里我还添加了两个方块,一个黄色方块1 in和一个蓝色方块72 pt.如屏幕截图所示,除红色方块外的所有方块都具有相同的大小.
当用尺子物理地测量结果时,红色正方形大约一英寸大,而其余正方形仅大约0.67英寸大.
来自Lint的警告指的是类别4类型的设备,它们返回xdpi和ydpi的错误值.由于xdpi/ydpi不能这些设备中的单元(可信mm,in,pt依赖于它们)不能被任何可信的.
文档错了吗?
没有文档是正确的,这些单位是基于屏幕的物理大小.然而,一些有问题的设备报告错误的屏幕物理尺寸值(xdpi/ydpi)到Android,然后这些单位也是错误的.
为什么Lint在使用pt时不会发出警告?
Lint的开发人员可能只是忘记了pt,它in和and mm.一样有问题.
Lint建议使用的原因dp是因为这是一个在Android中非常频繁使用的单位,所以如果任何设备都破坏了dp单位,几乎所有应用程序看起来都很糟糕,并且会在设备上市之前修复.
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |