Android TextView含K/的Spannable设置Span后异常换行问题求助
三星Android 9设备TextView Spannable文本异常换行问题
问题触发条件
- Spannable文本包含
K/或X/子串,大小写不限制,均会触发问题 - 子串的两个字符中至少一个设置了ForegroundColorSpan(或其他通用Span),且两个字符不在同一个Span的覆盖范围内
问题表现
/后的所有文本被强制换行;如果K/后紧跟/、.这类符号,这部分符号仍会保留在同一行。
复现环境说明
- 100%复现设备:搭载Android 9(API 28)的三星J4 Plus
- 无法复现场景:包含Android 9版本在内的多版本Pixel 5模拟器、其余品牌测试设备均表现正常
- 已排除干扰项:该问题与TextView宽高设置无关,宽高均设为
wrap_content的默认原生TextView也可复现
复现代码
// 构造包含"K/"的字符串 String textString = "1K/2K"; // 构造SpannableString并设置颜色Span SpannableString spannableString = new SpannableString(textString); spannableString.setSpan( new ForegroundColorSpan(someColor), 0, textString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); myMaterialButton.setText(spannableString, TextView.BufferType.SPANNABLE);
原因推测与解决方案
- 原因推断:该问题和TextView采用的Unicode换行算法异常有关,大概率是三星定制ROM对文本排版逻辑的修改引发的兼容问题
- 可行解决方案:在
/两侧插入零宽词连接器\u2060即可解决异常换行问题
内容的提问来源于stack exchange,提问作者CodingBeing
相关产品推荐
相关产品推荐

