如何从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
相关产品推荐
相关产品推荐

