Android开发 Html工具类详解
前言
在一些需求富文本显示或者编辑的开发情况下,数据都是用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工具类详解的更多相关文章
- IE8“开发人员工具”使用详解上(各级菜单详解)
来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...
- IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)
来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- android 开发 常用工具类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...
- 最全Android开发常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括 HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.Pack ...
- Android开发——事件分发机制详解
0. 前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...
- Android开发 ExpandableListView 可折叠列表详解
前言 在需要实现一个List的item需要包含列表的时候,我们就可以选择ExpandableListView. 其实这个View的原始设计还是ListView的那套.就是增加2层的ListView而已 ...
- Android开发:程序目录结构详解
HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...
随机推荐
- .Net Core 部署之一 《CentOS 从GitHub/Gitee 等源代码网站部署Web网站》
先看下楼主从某阿打折购买的渣渣服务器 lsb_release -a 一.安装dotnet-SDK 注册微软的服务 sudo rpm -Uvh https://packages.microsoft.co ...
- (c# )操作Excel的时候出现:不能使用对象或链接
可能就是你打开了多个Excel进程没有关掉出现的问题. 编程:对文件操作的时候要养成关掉进程的习惯 在c#中操作完后关闭资源的代入如下: System.Runtime.InteropServices. ...
- JQuery validate验证规则
//定义中文消息 var cnmsg = { required: “必选字段”, remote: “请修正该字段”, email: “请输入正确格式的电子邮件”, url: “请输入合法的网址”, d ...
- Ubantu18.04安装WPS
1.去WPS官网选在合适的版本下载安装包2.在官网下载字体包3.分别右键点击安装包,选择第一项“用软件安装打开”,进行安装即可.4.此时启动应用,应该会提示系统缺失字体.5.解决字体缺失(转)
- 两个table合并
1.两个一样的table合并用Merge函数即可合并(但要求table要有主键id) DataTable1.Merge(DataTable2); 2.没写完,以后继续补充(只有经过笔者验证,能用的才会 ...
- Centos6 安装完之后,没有网络
Virtualbox安装的centos 6.10的虚拟机,安装时,网络是NAT网络,安装完之后,将网络改为桥接网卡,启动虚拟机之后,使用 ifconfig 命令查看没有到eth0的信息,只有127.0 ...
- Java 基础 - 原生类型
更详细的说明,请参考: Java 原生类型与包装器类型深度剖析,https://blog.csdn.net/justloveyou_/article/details/52651211 一. 原生类型与 ...
- 一阶段项目 总结 之 两张图片对比 手写 jquery 也可以使用beer slider 插件
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title> ...
- C++在#include命令中,用〈 〉和“”有什么区别
使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: 使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找.
- LUOGU P2564 [SCOI2009]生日礼物 (队列+模拟)
传送门 解题思路 还是比较好想的,用一个队列,然后把所有点放在一起排个序,依次入队.每次检查队头元素的种类是否为当前入队元素种类,是的话就一直\(pop\),每次更新答案即可. 代码 #include ...