自定义组合控件时,自定义控件中TextView的字体,会发现字体比预计的要大很多。下面分析一下原因并提出我的解决方法
原因的两个关键点:
-
a.getDimension(R.styleable.MenuItemLayout_title_text_size,15)
-
hintTv.setTextSize(size);
分析如下:
- 最终在我们手机上显示的字体都会要转成px单位的。及时及赋值用的是sp
- 如果我们在xml中没有指定文字大小,那么通过
getDimension
返回的就是15,但是我们在xml文件里指定了文字的大小,那么getDimension
返回的就是经过就是经过处理后的值(45),可参考这篇文章 - 而调用
setTextSize(size)
会对我们的文字大小进行二次处理,所以最后得到的文字比我们预计的要大很多
解决方案:
setTitleTextSize(a.getDimension(R.styleable.MenuItemLayout_title_text_size,15));
private void setTitleTextSize(float size) { if ((int)size == 15){ //如果没有指定,是默认值 titleTv.setTextSize(size); }else { //如果已经指定了,即通过getDimension方法系统已经帮我们转成了px titleTv.setTextSize(TypedValue.COMPLEX_UNIT_PX,size); } }