如何在 Android/Kotlin 中显示有换行符的文本,但当用户选择并复制它时,剪贴板中没有换行符?
也就是说,如果我有:
<TextView
android:id="@+id/recognized_text"
android:textIsSelectable="true"
/>
假设文本是
text =“一个字符串 一些文字”
然后视图应该显示两行,例如
a string with
some text
但是当我选择文本时我应该得到:
a string with some text
在剪贴板中(没有换行符)。用户也可以仅选择文本的一部分,因此请记住这一点。如果有更好的方法,我们不需要专门使用
TextView
。
我考虑使用“
”而不是“/n”,但我找不到任何关于这是否会改变任何内容的文档。我觉得不会。
这是您可以尝试获得所需结果的代码
首先将文本转换为可扩展的字符串
private fun getClickableSpannable(text: String): CharSequence {
val spannable = SpannableStringBuilder(text)
// Create a ClickableSpan to manipulate clipboard content
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
// Extract the clicked text without line breaks
val selectedText = (widget as TextView).text.subSequence(
widget.selectionStart,
widget.selectionEnd
).toString().replace("\n", "")
// Copy the cleaned text to the clipboard
val clipboard =
getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Cleaned Text", selectedText)
clipboard.setPrimaryClip(clip)
}
}
// Apply the ClickableSpan to the entire text
spannable.setSpan(
clickableSpan,
0,
text.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
return spannable
}
之后在您的文本视图中进行链接移动
recognizedText.text = getClickableSpannable(text)
recognizedText.movementMethod = LinkMovementMethod.getInstance()