前言

  在一些需求富文本显示或者编辑的开发情况下,数据都是用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. python 测试框架nose

    python测试框架nose nose不是python自带模块,这里我才用pip的方式安装 pip install nose 这样就完成了安装,然后再确认下是否安装成功了,直接打开cmd输入noset ...

  2. 2019 牛客多校第六场 J Upgrading Technology

    题目链接:https://ac.nowcoder.com/acm/contest/886/J 题目大意 略. 分析 见代码. 代码如下 #include <bits/stdc++.h> u ...

  3. 剑指offer——30包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   题解: 借助辅助栈,新的数据<=f辅助栈顶时,就压入辅助栈,这样,就能保证辅 ...

  4. C#Object与XML文件或二进制文件之间的转化

    Object To Xml 文件 public static bool Serializer<T>(object obj, string path) { FileStream xmlfil ...

  5. TortoiseGit配置私钥关联github

    1.使用Git 命令行生成公钥和私钥 找到Git安装目录(我的安装目录是  D:\DevelopSoft\Git),打开git-bash.exe. 输入命令 回车 ssh-keygen -t rsa ...

  6. SSM 整合 Shiro

    1. 导包 <!-- spring --> <dependency> <groupId>org.springframework</groupId> &l ...

  7. 大道浮屠诀---cwRsync同步工具的使用

    目的: 在日常生活中,我们有时候会遇到这样类似的问题 ---需要把一台服务器上的某个重要的文件进行备份(拷贝另外的服务器上) ---需要同步系统上的配置文件到其他系统 利用此cwRsync软件可以解决 ...

  8. Nginx+win10安装配置

    一.前言 Nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx可以进行反向代理.负载均衡.HTTP服务器(动静分离).正向代 ...

  9. PostGIS 通过SQL语句实现空间分析【入门级】

    PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象.空间索引.空间操作函数和空间操作符.同时,PostGIS遵循OpenGIS的规范. ...

  10. iOS开发系列-打印内存地址

    打印内存地址 基本数据类型 定义一个基本数据类型,会根据变量类型分配对应的内存空间.比如定义一个int类型的变量a. int a = 10; 内存如下 输入变量a在内存中内存地址 NSLog(@&qu ...