我有一个TextView
,其中包含一个随机的60个字符的字符串。
该字符串是一个单词,不包含任何空格。
问题在于,在某些字符(例如@、&、%
)之后,会出现自动换行,而我不想要这种情况。
我的期望结果是每一行都填满到结尾,并且没有随机的换行。
我尝试了设置breakStrategy
并更新hyphenationFrequency
,但这并没有帮助。
如何防止这种情况发生呢?
更新: 感谢 @Darkman,这是解决方案,我已经编写了代码。它检查每行可以容纳多少个字符而不需要换行,然后在结尾处添加\n
。
请注意,对于我的用例,字符串中没有空格,并且我使用的是等宽字体。
fun TextView.toNonBreakingString(text: String?): String {
if (text == null) return ""
val container = parent as? ViewGroup ?: return text
val lineWidth = (container.width - container.paddingStart - container.paddingEnd).toFloat()
val maxCharsInOneLine = paint.breakText(text, 0, text.length, true, lineWidth, null)
if (maxCharsInOneLine == 0) return text
val sb = StringBuilder()
var currentLine = 1
var end = 0
for (i in 0..text.count() step maxCharsInOneLine) {
end = currentLine * maxCharsInOneLine
if (end > text.length) end = text.length
sb.append(text.subSequence(i, end))
sb.append("\n")
currentLine = currentLine.inc()
}
if (end < text.length) {
val remainingChars = text.length - end
sb.append(text.takeLast(remainingChars))
}
return sb.toString()
}
TextView
上设置android:maxLines="1"
。 - CommonsWare