前言

在一些需求富文本显示或者编辑的开发情况下,数据都是用html的格式来保存文本信息的.而google是有提供解析html的工具类那就是Html.有了Html可以让TextView也支持富文本(其实原理还是解析Html然后在转成SpannableString再给TextView显示)

显示Html格式文本

String htmlContent = "

先帝创业未半而中道崩殂

" +


"今天下三分" +

"

益州疲弊,此诚危急存亡之秋也

";


mTextView.setText(Html.fromHtml(htmlContent));

htmlContent是一段html的格式内容的文本,而让TextView显示富文本内容只需要轻松的调用Html.fromHtml(htmlContent)即可. 而Html.fromHtml则是将html转成了Spanned

另外注意!html格式里的"引号需要按照java的格式添加\斜杠

效果图:

android html数据 展示 安卓html_html

显示带图片地址的Html

final String htmlContent = "

先帝创业未半而中道崩殂

" +


"今天下三分" +

"

益州疲弊,此诚危急存亡之秋也

" +


"



@Overridepublic voidrun() {
mSpanned= Html.fromHtml(htmlContent, newHtml.ImageGetter() {
@OverridepublicDrawable getDrawable(String source) {
Drawable drawable= null;try{
drawable= Drawable.createFromStream(new URL(source).openStream(), "image.jpg");//下载图片
drawable.setBounds(0, 0, 200, 200);//设置图片显示范围
} catch(IOException e) {
e.printStackTrace();
}returndrawable;
}
},null);
runOnUiThread(new Runnable() { //切换到主线程设置内容
@Overridepublic voidrun() {
mTextView.setText(mSpanned);
}
});
}
}).start();

效果图:

android html数据 展示 安卓html_android html数据 展示_02

SpannableString转成Html格式文本

能正着转,那么当然能反着转.下面我们来演示SpannableString转成Html格式文本

String content = "先帝创业未半而中道崩殂\n今天下三分益州疲弊,\n此诚危急存亡之秋也";
SpannableString spannableString= newSpannableString(content);
spannableString.setSpan(newForegroundColorSpan(Color.RED)
, content.indexOf("先帝")
, content.indexOf("\n今")
, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(newStyleSpan(Typeface.BOLD)
, content.indexOf("殂\n")
, content.indexOf("此诚")
, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
Log.e(TAG,"SpannableString转成html:"+Html.toHtml(spannableString));

结果:

2019-07-23 14:36:53.271 11620-11620/demo.yt.com.demo E/demo.yt.com.demo.MainActivity: SpannableString转成html:

先帝创业未半而中道崩

今天下三分益州疲弊,

此诚危急存亡之秋也

中文部分也被转成了unicode编码,不过不用担心,直接给TextView 是可以正常显示中文的.

舍弃Html格式,提取文本内容

SpannableString直接提取文本(UTF-8格式)

Spanned spanned = Html.fromHtml(htmlContent);//htmlContent是String类型的html文本

SpannableString spannableString = newSpannableString(spanned);

holder.itemText.setText(spannableString.toString());

推荐使用这种方式,直接utf-8无需转换.

SpannableString用Html类提取文本内容(会变成unicode格式编码,此方法及供参考)
String content = "先帝创业未半而中道崩殂\n今天下三分益州疲弊,\n此诚危急存亡之秋也";
SpannableString spannableString= newSpannableString(content);
spannableString.setSpan(newForegroundColorSpan(Color.RED)
, content.indexOf("先帝")
, content.indexOf("\n今")
, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(newStyleSpan(Typeface.BOLD)
, content.indexOf("殂\n")
, content.indexOf("此诚")
, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
Log.e(TAG,"提取文本:"+Html.escapeHtml(spannableString));

结果:

2019-07-23 14:38:56.132 11753-11753/demo.yt.com.demo E/demo.yt.com.demo.MainActivity: 提取文本:先帝创业未半而中道崩殂 今天下三分益州疲弊, 此诚危急存亡之秋也

一样中文部分也被转成了unicode编码.

Html里提取内容文本内容(会变成unicode格式编码,此方法及供参考)

String htmlContent = "

先帝创业未半而中道崩殂

" +


"今天下三分" +

"

益州疲弊,此诚危急存亡之秋也

";


Spanned spanned=Html.fromHtml(htmlContent);

Log.e(TAG,"提取文本:"+Html.escapeHtml(spanned));

结果也是跟上面一样

END