android 如何复制文本到剪贴板样式与字体?

gg0vcinb  于 2023-04-18  发布在  Android
关注(0)|答案(1)|浏览(149)

我想在使用Typeface设置样式后将示例文本的样式形式复制到剪贴板,但复制时它被复制为未设置样式。如何复制样式文本?

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"
        )
    }
xzv2uavs

xzv2uavs1#

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

这是我的粗体文字

如果你直接复制这个,你会发现它的原始版本一样;
这是我的粗体文字
但如果你把它转成HTML格式;

mySpannedText.html

当你打印它的时候,它看起来就像

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

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

Html.fromHtml(sourceString)

在你的代码中,你可以将跨越的字符串存储在剪贴板中,而这些html会旋转。但是在粘贴部分,你应该编写一些使用“Html.fromHtml()”的代码。我没有太多关于剪贴板管理器的信息,但我只是想告诉你这一点。

相关问题