安卓代码中获取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))
现在的效果
相关文章推荐
- 各类Java heap space 解决方法,并通过java代码获取JVM的相关信息,所在操作系统的信息(包含eclipse&amp;myeclipse的调试的内存设置)
- IPhone 开发 代码中设置字体样式及使用方法
- ubuntu 9.10 root登录 vi支持backspace与方向键 退出xwindow快捷键设置 apt-get源获取 配置雅黑字体 小企鹅输入法安装 NetBeans字体乱码解决 转载
- jquery easyui-linkButton获取和设置按钮text并且解决火狐不支持innerText的方法
- 安卓代码混淆与反射冲突,地图无法显示等问题解决及反编译方法
- windows7系统不能设置楷体gb2312字体的解决方法
- ASP.NET获取不到JS设置cookies的解决方法
- windows防火墙无法更改某些设置,错误代码0x80070422解决方法
- 利用svcutil.exe 访问windows Server 2003的wcf服务生成客户端代码报错:无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
- KindEditor设置为过滤模式,但在代码模式下提交表单时不过虑HTML标签的解决方法
- vs2010 字体:fixedsys在选项字体设置里面找不到,勉强凑合的解决方法
- input设置为disabled提交后获取不到该值的解决方法
- 获取屏幕高宽,在代码中设置控件大小的方法
- 关于C#获取html代码出现404错误的解决方法
- [解决方法]网络策略设置禁止您使用该网站获取您计算机的更新程序。 如果您确认此消息有误,请向您的系统管理员咨询。
- input设置为disabled提交后获取不到该值的解决方法
- 关于netbeans字体设置问题的终极解决方法
- 利用svcutil.exe 访问windows Server 2003的wcf服务生成客户端代码报错:无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
- webview 中textarea设置斜体字体失效的解决方法