android适配规则-控件及字体尺寸设置

为了使用户界面能够在现在和将来的显示器上正常显示,google建议大家始终使用sp作为文字大小的单位,将dp作为其他元素的单位。

当然,也可以考虑使用矢量图形,而不是用位图。原因如下:


px(pixel):屏幕像素,屏幕上的真实像素表示。
dpi(dot per inch):表示屏幕每英寸像素点数,即:每英寸像素密度(估算值)。
屏幕对角线的长度,代表手机的尺寸。
dpi计算示例:
比如:计算WVGA(800*480)分辨率,3.7英寸的密度DPI,则:
屏幕水平像素点数为:480
屏幕垂直像素点数为:800
根据三角形边长计算公式(长^2+宽^2=玄^2):
480^2 + 800^2 = 230400 + 640000 = 870400
870489 = 933 * 933
得出对角线像素点数为:933
手机尺寸:3.7“,即玄长3.7"
DPI = 933/3.7 = 252  每英寸上有252个像素点,即屏幕密度为252dpi

dip(density-independent pixel):设备独立像素,缩写为dp,是一种基于屏幕密度(DPI)的抽象单位。
在每英寸160像素点的显示器上,1dp = 1px  即:一个设备独立像素相当于一个160dpi屏幕上的物理像素。 
在程序运行时,系统根据屏幕的实际密度透明的处理任何需要缩放的设备独立像素单元,
设备独立像素转换成屏幕实际像素的换算很简单:pixels = dp * (dpi / 160). 

例如在240dpi的屏幕上,1个设备独立像素等于1.5物理像素。


为确保UI组件在不同的屏幕都能合适的展示,强烈建议使用设备独立像素单元来定义你的应用程序UI。 

如何做到与密度无关:
  如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,
但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。
那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。
但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。 
也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。
也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。
官方文档总结的计算公式为:pixels = dp * (density /160).

sp(scaled pixels):与刻度无关的像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。

由此,根据 google 的建议,控件的字号最好使用 sp 做单位。


pt(point):是一个标准的长度单位(磅),1pt=1/72英寸,用于印刷业,非常简单易用;

in(英寸):长度单位。
mm(毫米):长度单位。

你可能感兴趣的:(android适配规则-控件及字体尺寸设置)