如何将文本复制到带有字体样式的剪贴板?

How to copy text to clipboard styled with Typeface?

提问人:burhanyaprak 提问时间:4/15/2023 更新时间:4/17/2023 访问量:157

问:

我想在使用字体设置样式后将示例文本的样式形式复制到剪贴板,但在复制时将其复制为无样式。如何复制样式文本?

binding.buttonStyle.setOnClickListener {
            val textStyleSample = TextStyle(
                0,
                "Sample Text",
                CustomFontStyle.rubik_pixels_regular
            )

            val spannable = SpannableString(textStyleSample.text)
            spannable.setSpan(
                makeStyleForText(textStyleSample),
                0,
                textStyleSample.text.length,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )

            val clipboardManager = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
            val clipData = ClipData.newPlainText(
                "styledText",
                spannable.toString()
            )
            clipboardManager.setPrimaryClip(clipData)
        }

data class TextStyle(
    val id: Int, var text: String, var customFontStyle: CustomFontStyle
)

enum class CustomFontStyle {
    rubik_pixels_regular,
    inspiration_regular,
}

private fun makeStyleForText(textStyle: TextStyle): Typeface {
        return Typeface.createFromAsset(
            requireContext().assets,
            "${textStyle.customFontStyle}.ttf"
        )
    }
java android 字符串 kotlin 字体

评论


答:

0赞 Ahmet Kaan 4/17/2023 #1

您可以使用 html 复制样式字符串,但当然您不能复制 html,您只能复制字符串值,所以也许您可以尝试将 html 转换为字符串,然后再次转换。让我举个例子。我有一个粗体文字。让我们称之为

这是我的粗体文字

如果你直接复制这个,你会发现它的原始版本是这样的;

这是我的粗体文字

但是如果你把它变成html,比如;

mySpannedText.html

当你打印它时,它看起来像这样;

<b>This is my bold text</b>

当你把它粘贴到任何地方时,它看起来也是这样的。但是您可以再次将其转换为粗体文本。如果我们假设你在一个名为“sourceString”的变量中定义它,那么你可以把它变成;

Html.fromHtml(sourceString)

在您的代码中,您可以将跨区字符串存储在剪贴板中,并带有这些 html 转换。但是在粘贴部分,您应该编写一些使用“Html.fromHtml()”的代码。我没有那么多关于剪贴板管理器的信息,但我只想通知你这一点。