您的位置:首页 > 编程语言

安卓代码中获取dimen设置字体大小setTextSize,会变得比dimen的值还大——解决方法

2016-12-01 09:03 399 查看

背景


 

holder.tvMsgContent.setTextSize(mContext.getResources().getDimensionPixelOffset(R.dimen.message_content_font));

<dimen name="message_content_font">32px</dimen>

实际效果: 上面第一句java代码,设置的是红框中的字体大小,按理说应该和上面的标题差不多大小吧,为什么差这么多呢?

解决

动态设置TextView字体大小时候,会出现偏差。

TextView中暴露出来设置字体大小的方法有两种。
setTextSize(float size)
setTextSize(int unit, float size)

上面用的是第一种,现在看看第二种方法的源码
/**
* Set the default text size to a given unit and value.  See {@link
* TypedValue} for the possible dimension units.
*
* @param unit The desired dimension unit.
* @param size The desired size in the given units.
*
* @attr ref android.R.styleable#TextView_textSize
*/
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;

if (c == null)
r = Resources.getSystem();
else
r = c.getResources();

setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}

看到unit这个参数,是用来标记字体大小单位,TypedValue里面设置了好多种,我们常用的就两COMPLEX_UNIT_SP和COMPLEX_UNIT_PX,正好对应平时我们使用的px和sp。
它在内部默认传进来的size是sp单位的,也就是说不管你在外面做了什么处理,调用setTextSize(float size)这个方法时候,size的单位是sp。

这也就是你字体变大的原因。

正确使用时
setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, mContext.getResources().getDimensionPixelOffset(R.dimen.message_content_font))

现在的效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 字体 as gradle
相关文章推荐