在写Android自定义控件的时候,涉及到TextView的TextSize属性。
我写的属性如下:
<attr name="text_size" format="dimension" />
获取TextSize和设置TextSize的时候,如下所示:
int textSize = (int) a.getDimension(attr, TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10,
getResources().getDisplayMetrics()));
mTextView.setTextSize(textSize);
最后得出的TextView结果比我想象中的大很多,上网查了一下才知道,
原来getDimension是获取某个dimen的值,如果是dp或sp的单位,将其乘以density,如果是px,则不乘;其结果返回的都是px值。
而
setTextSize()方法默认是按sp值设置进去的。二者的单位不同,所以最后的结果会偏差很大。
这里可以用setTextSize()的另外一种形式,可以指定单位:
setTextSize(int unit, int size)
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
所以getDimension获取的px值是不能直接用setTextSize()方法设置的,
应该使用setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
这样设置最后结果就对了。