在 andoird 中选择并复制没有换行符的文本

问题描述 投票:0回答:1

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

也就是说,如果我有:

<TextView
        android:id="@+id/recognized_text"
        android:textIsSelectable="true"
        />

假设文本是

text =“一个字符串 一些文字”

然后视图应该显示两行,例如

a string with
some text

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

a string with some text

在剪贴板中(没有换行符)。用户也可以仅选择文本的一部分,因此请记住这一点。如果有更好的方法,我们不需要专门使用

TextView

我考虑使用“
”而不是“/n”,但我找不到任何关于这是否会改变任何内容的文档。我觉得不会。

android kotlin textview copy-paste
1个回答
0
投票

这是您可以尝试获得所需结果的代码

首先将文本转换为可扩展的字符串

 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()
© www.soinside.com 2019 - 2024. All rights reserved.