前言

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

显示Html格式文本

        String htmlContent = "<p><font size=\"3\" color=\"red\">先帝创业未半而中道崩殂</font></p>" +
"<b><font size=\"5\" color=\"blue\">今天下三分</font></font></b></br>" +
"<h1>益州疲弊,此诚危急存亡之秋也</h1></br>";
mTextView.setText(Html.fromHtml(htmlContent));

htmlContent是一段html的格式内容的文本,而让TextView显示富文本内容只需要轻松的调用Html.fromHtml(htmlContent)即可. 而Html.fromHtml则是将html转成了Spanned
另外注意!html格式里的"引号需要按照java的格式添加\斜杠

效果图:

显示带图片地址的Html

        final String htmlContent = "<p><font size=\"3\" color=\"red\">先帝创业未半而中道崩殂</font></p>" +
"<b><font size=\"5\" color=\"blue\">今天下三分</font></font></b></br>" +
"<h1>益州疲弊,此诚危急存亡之秋也</h1></br>" +
"</p><img src=\"http://n.sinaimg.cn/sinacn/w450h212/20171223/16c3-fypvuqf3150782.jpg\""; new Thread(new Runnable() { //从网络中下载图片是耗时操作,所以需要使用线程.还有mSpanned = Html.fromHtml()的创建其实也是异步耗时的.
@Override
public void run() {
mSpanned = Html.fromHtml(htmlContent, new Html.ImageGetter() {
@Override
public Drawable 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();
}
return drawable;
}
}, null); runOnUiThread(new Runnable() { //切换到主线程设置内容
@Override
public void run() {
mTextView.setText(mSpanned);
}
});
}
}).start();

效果图:

SpannableString转成Html格式文本

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

        String content = "先帝创业未半而中道崩殂\n今天下三分益州疲弊,\n此诚危急存亡之秋也";
SpannableString spannableString = new SpannableString(content);
spannableString.setSpan(new ForegroundColorSpan(Color.RED)
, content.indexOf("先帝")
, content.indexOf("\n今")
, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new StyleSpan(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:<p dir="ltr"><span style="color:#FF0000;">先帝创业未半而中道崩</span><span style="color:#FF0000;"><b>殂</b></span><br>
<b>今天下三分益州疲弊,</b><br>
此诚危急存亡之秋也</p>

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

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

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

Spanned spanned = Html.fromHtml(htmlContent);//htmlContent是String类型的html文本
SpannableString spannableString = new SpannableString(spanned);
holder.itemText.setText(spannableString.toString());

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

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

        String content = "先帝创业未半而中道崩殂\n今天下三分益州疲弊,\n此诚危急存亡之秋也";
SpannableString spannableString = new SpannableString(content);
spannableString.setSpan(new ForegroundColorSpan(Color.RED)
, content.indexOf("先帝")
, content.indexOf("\n今")
, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new StyleSpan(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 = "<p><font size=\"3\" color=\"red\">先帝创业未半而中道崩殂</font></p>" +
"<b><font size=\"5\" color=\"blue\">今天下三分</font></font></b></br>" +
"<h1>益州疲弊,此诚危急存亡之秋也</h1></br>";
Spanned spanned = Html.fromHtml(htmlContent);
Log.e(TAG, "提取文本:"+Html.escapeHtml(spanned));

结果也是跟上面一样

 

END

Android开发 Html工具类详解的更多相关文章

  1. IE8“开发人员工具”使用详解上(各级菜单详解)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...

  2. IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...

  3. Android开发常用工具类

    来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...

  4. android 开发 常用工具类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...

  5. 最全Android开发常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括  HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.Pack ...

  6. Android开发——事件分发机制详解

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...

  7. Android开发 ExpandableListView 可折叠列表详解

    前言 在需要实现一个List的item需要包含列表的时候,我们就可以选择ExpandableListView. 其实这个View的原始设计还是ListView的那套.就是增加2层的ListView而已 ...

  8. Android开发:程序目录结构详解

    HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...

  9. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

随机推荐

  1. redis和redis php扩展安装

    redis的源码安装 wget http://download.redis.io/redis-stable.tar.gz tar -zxvf redis-stable.tar.gz cd redis- ...

  2. var 更明确地表示一个变量被设置为零值

    创建一个变量并被初始化其为零值,习惯使用关键字var.这种做法是为了更明确地表示一个变量被设置为零值. 如果变量被初始化为某个非零值,就配合结构字面量和短变量操作符来创建变量. 零值 数值类型:0 字 ...

  3. PyTorch中,关于model.eval()和torch.no_grad()

    一直对于model.eval()和torch.no_grad()有些疑惑 之前看博客说,只用torch.no_grad()即可 但是今天查资料,发现不是这样,而是两者都用,因为两者有着不同的作用 引用 ...

  4. MYSQL查询查找重复的电子邮箱

    编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +----+---------+| Id | Email |+----+---------+| 1 | a@b.com | ...

  5. Erlang学习记录:相关工具和文档

    在线工具和文档 网址 说明 OTP Reference Page Index 内置模块查询 Erlang/OTP Applications N Kernel Reference Manual 入门官方 ...

  6. socket 上传文件

    """ "" server.py """服务端 """import socketimpor ...

  7. 校园商铺-4店铺注册功能模块-10店铺注册之js实现

    1. 建立js目录和文件 1.1 建立js目录 在webapp下新建文件夹js,再在js目录下新建shop文件夹. 1.2 js文件 js的功能: 1.从后台获取到店铺分类.区域等是信息,将它填充到前 ...

  8. 类文件路径一classpath

    classpath作用 指定配置/资源文件的路径 web文件夹层次 src(编译前) main java resources webapp test java resources pom.xml we ...

  9. CSS案例3(在线教育网站)

    案例练习目的是总结以前的css和html 还有ps的使用. 制作步骤: 准备相关文件.(内部样式表) html文件(index.html) 图片文件 准备CSS 初始化. 书写结构和样式 确定版心(是 ...

  10. thinkphp 包含文件

    在当前模版文件中包含其他的模版文件使用include标签,标签用法: <include file='模版表达式或者模版文件1,模版表达式或者模版文件2,...' /> 博智达直线电机价格 ...