首先android中对于文本绘制时候对应到到屏幕上都是一个一个的像素。

同一个文本,在不同分辨率的设备上,所占的像素不一样。例如:图片大小为80×32像素在720P上看着合适,但是到1080P上((dpi)更高的新显示器)则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题。

所以类推,在1080P上显示的42号字体,对应的在720P上就需要显示28像素的字这样看起来才不会不协调。

那么当我们开发程序时候,怎么根据不同分辨率设置不同的字号以适配设备呢?


其实,android中有以下几个单位概念:

px   :是屏幕的像素点。

dp   :设备独立像素 — 这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。设备分如果一个160dpi的屏幕,1dp=1px。px=dp*(dpi/160)。

dpi:android系统定义了四种像素密度dpi:
低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),
它们对应的dp到px的系数分别为0.75、1、1.5和2,
这个系数乘以dp长度就是像素数。

如果使用该单位,42 dp的文字在160dpi上是42像素;在240dpi上就是42*1.5=63像素字。      

dip  :等同于dp

sp   :同dp相似,但还会根据用户的字体大小偏好来缩放(建议使用sp作为文本的单位,其它用dip)。 根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。


   说了那么多,那么在设置文本字体大小就知道怎么设置了吧。

    TextView有以下方法提供:

public float getTextSize(); //返回单位是px

	 public void setTextSize(int unit, float size) ;//可以指定单位设置
	

	 public void setTextSize(int unit, float size) ;//可以指定单位设置
         说明:
		第一个参数可设置如下静态变量:
		TypedValue.COMPLEX_UNIT_PX : Pixels
		TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
		TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels