通过tvPaint.measureText逐字测量自行换行 解决Android 自动换行不准确问题
/**
* 逐字测量 解决Android 自动换行不准确问题
* @param content 文本内容 支持String (spannableString 暂时还有第二行span丢失的问题)
* @param maxWidth 文字最大显示宽度
*/
private void autoSplitText(TextView tv, CharSequence content, float maxWidth) {
Paint tvPaint = tv.getPaint()
if (tvPaint.measureText(content, 0, content.length()) <= maxWidth) {
tv.setText(content)
} else {
//逐字符测量,在超过可用宽度的前一个字符处插入\n手动换行
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder()
float lineWidth = 0
int lastSubIndex = 0
for (int index = 0
char ch = content.charAt(index)
lineWidth += tvPaint.measureText(String.valueOf(ch))
if (lineWidth > maxWidth) {
spannableStringBuilder.append(content.subSequence(lastSubIndex, index - 1))
spannableStringBuilder.append("\n")
lastSubIndex = index - 1
lineWidth = 0
}
}
spannableStringBuilder.append(content.subSequence(lastSubIndex, content.length()))
tv.setText(spannableStringBuilder)
}
}