android 在Andoird中选择和复制不带换行符的文本

koaltpgm  于 2024-01-04  发布在  Android
关注(0)|答案(2)|浏览(132)

如何在Android/Kotlin中显示具有换行符的文本,但当用户选择并复制它时,剪贴板中没有换行符?
也就是说,如果我有:

  1. <TextView
  2. android:id="@+id/recognized_text"
  3. android:textIsSelectable="true"
  4. />

字符串
假设短信是
text =“a string with \n some text”
则视图应显示两行,如

  1. a string with
  2. some text


但是当我选择文本时,我应该得到:

  1. a string with some text


在剪贴板中(没有换行符)。用户也可以只选择部分文本,因此请记住这一点。如果有更好的方法,我们不需要特别使用TextView。当您长按文本时,它也应该使用相同的复制选择按钮,如TextView通常使用常规弹出菜单
我考虑用“
“而不是“/n”,但我找不到任何文件,如果这将改变什么。我不认为它会。

yuvru6vn

yuvru6vn1#

  1. val textToCopy = originalText.replace(Regex("[\\n]"), "")
  2. val clipboardManager = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
  3. val clipData = ClipData.newPlainText("text", textToCopy)
  4. clipboardManager.setPrimaryClip(clipData)

字符串
复制并替换新行

nlejzf6q

nlejzf6q2#

下面是你可以尝试得到你想要的结果的代码
首先将文本转换为可扩展字符串

  1. private fun getClickableSpannable(text: String): CharSequence {
  2. val spannable = SpannableStringBuilder(text)
  3. // Create a ClickableSpan to manipulate clipboard content
  4. val clickableSpan = object : ClickableSpan() {
  5. override fun onClick(widget: View) {
  6. // Extract the clicked text without line breaks
  7. val selectedText = (widget as TextView).text.subSequence(
  8. widget.selectionStart,
  9. widget.selectionEnd
  10. ).toString().replace("\n", "")
  11. // Copy the cleaned text to the clipboard
  12. val clipboard =
  13. getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
  14. val clip = ClipData.newPlainText("Cleaned Text", selectedText)
  15. clipboard.setPrimaryClip(clip)
  16. }
  17. }
  18. // Apply the ClickableSpan to the entire text
  19. spannable.setSpan(
  20. clickableSpan,
  21. 0,
  22. text.length,
  23. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
  24. )
  25. return spannable
  26. }

字符串
之后,在您的textview给予链接移动

  1. recognizedText.text = getClickableSpannable(text)
  2. recognizedText.movementMethod = LinkMovementMethod.getInstance()


的数据

展开查看全部

相关问题