You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在安卓系统中复制粘贴文本时保留其原有字体样式?

问题根源

你当前使用的ClipData.newPlainText()方法仅支持存储纯文本内容,所有富文本样式(包括自定义字体、字重、颜色等格式)都会在存入剪贴板时被自动剥离,因此粘贴后仅能得到无样式的文本内容。

解决方案

改用ClipData.newHtmlText()存储带样式的富文本,存入前先将TextView的Spanned类型内容转成HTML格式,粘贴时再将HTML内容还原为带样式的文本即可:

存入剪贴板的修改后代码

textView.setOnClickListener(v -> {
    ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    // 将带样式的Spanned文本转换为HTML格式
    String htmlContent = Html.toHtml((Spanned) textView.getText());
    // 存储HTML格式的剪贴板内容
    ClipData clipData = ClipData.newHtmlText("styled_data", textView.getText(), htmlContent);
    clipboardManager.setPrimaryClip(clipData);
});

读取剪贴板还原样式的示例代码

ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
// 判断剪贴板内容是否为HTML格式
if (clipboardManager.hasPrimaryClip() && clipboardManager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML)) {
    ClipData.Item item = clipboardManager.getPrimaryClip().getItemAt(0);
    // 将HTML还原为带样式的Spanned文本
    Spanned styledText = Html.fromHtml(item.getHtmlText(), Html.FROM_HTML_MODE_LEGACY);
    // 目标TextView需要提前设置好aguafina_script字体,才能正确渲染对应字体样式
    targetTextView.setText(styledText);
}

注意事项

  • 若需要跨应用粘贴保留样式,需目标应用支持解析HTML格式的剪贴板内容,若目标应用仅接收纯文本,样式仍会丢失
  • 自定义字体aguafina_script需要在粘贴目标的运行环境中也引入了对应字体包,否则会自动降级为系统默认字体

内容的提问来源于stack exchange,提问作者Divyam Savsaviya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:27:01