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

如何从TextView/EditText获取带HTML格式的文本并转换为全大写

问题根源

你当前调用et.getText().toString()的操作,会直接抹掉TextView/EditText内部存储的富文本格式标记,只能拿到纯文本内容,自然无法获取到原始的HTML格式化字符串。

解决方案

Android中TextView.getText()、EditText.getText()返回的实际是Spanned接口实现类,内部携带了所有富文本格式信息,你需要用Html.toHtml()方法将其转换为带HTML标签的字符串,再进行后续处理。

修正后的代码如下:

//These custom functions return ArrayList of components
ArrayList<EditText> myEditTextList = getAllEditText(viewGroup);
ArrayList<TextView> myTextViewList = getAllTextView(viewGroup);

for (EditText et : myEditTextList) {
    // 先将Spanned富文本转为带HTML标签的字符串
    String originalHtml = Html.toHtml(et.getText());
    // 注意:如果只需要文本内容大写、保留HTML标签不变,不要直接对整个originalHtml调用toUpperCase
    // 可以先解析为Spanned,遍历Span修改文本大小写,或者用正则匹配只转标签外的文本内容
    // 示例为直接转大写(允许标签也大写,Html.fromHtml可兼容)
    et.setText(Html.fromHtml(originalHtml.toUpperCase()));
}
for (TextView tv : myTextViewList) {
    String originalHtml = Html.toHtml(tv.getText());
    tv.setText(Html.fromHtml(originalHtml.toUpperCase()));
}
注意事项
  • 如果你的原始HTML是自行拼接传入的,Html.toHtml()输出的标签可能和原始输入的写法略有差异,比如会自动补全闭合标签、添加部分默认样式属性,但格式效果是完全一致的,不影响后续解析渲染。
  • 若需要严格保留原始HTML结构,建议在首次给组件设置文本时,就将原始HTML字符串缓存到组件的Tag中,后续直接从Tag读取即可,无需反向转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:07