Android Studio 3.1更新后TextView的setTextSize单位行为异常
Android Studio 3.1 数据绑定 textSize 单位变更问题
我之前也碰到过这个情况!不少开发者在升级到Android Studio 3.1后都反馈过类似的问题——原本通过数据绑定设置textSize时,默认会把传入的数值当作SP单位处理,和TextView.setTextSize(float)的文档描述一致,但升级后突然变成了像素单位,导致文字大小和预期不符。
问题原因
这个变化其实是Android数据绑定库在3.1版本中的一个行为调整。在此之前,数据绑定对android:textSize属性的处理会自动将数值视为SP;但3.1版本之后,数据绑定的逻辑改成了默认按像素(px)解析无单位的数值,目的是和XML静态写法的行为保持一致(XML中无单位的尺寸数值默认是px)。
解决方案
你可以通过以下几种方式解决这个问题:
- 明确指定单位后缀:在数据绑定表达式里直接加上
sp后缀,这种方式最简洁,只要你的ViewModel中存储的是SP数值,就能让数据绑定按SP解析:android:textSize="@{viewModel.textSize}sp" - 用TypedValue转换单位:如果需要更灵活的单位转换,可以用
TypedValue.applyDimension()方法手动将SP转换为适配当前屏幕的像素值,再传入数据绑定:android:textSize="@{TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, viewModel.textSize, getResources().getDisplayMetrics())}" - 临时降级库版本:如果这个变更对你的项目影响极大,可以暂时将数据绑定库版本降级到3.1之前的版本(比如3.0.1),但不推荐长期这么做,建议还是适配新的行为逻辑。
其他开发者的反馈
当时这个问题在开发者社区里讨论挺多的,不少人都遇到了文字突然变小的情况,后来官方在Issue Tracker上确认这是一个有意的行为变更,目的是统一数据绑定和XML静态布局的属性解析逻辑。
内容的提问来源于stack exchange,提问作者Alan Todtenkopf
相关产品推荐
相关产品推荐

