前言

  在一些需求富文本显示或者编辑的开发情况下,数据都是用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. [JZOJ 5804] 简单的序列

    思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...

  2. LeetCode 746. Min Cost Climbing Stairs (使用最小花费爬楼梯)

    题目标签:Dynamic Programming 题目给了我们一组 cost,让我们用最小的cost 走完楼梯,可以从index 0 或者 index 1 出发. 因为每次可以选择走一步,还是走两步, ...

  3. 完美解决 IE6 position:fixed 固定定位问题

    关于 position:fixed; 属性 生成绝对定位的元素,相对于浏览器窗口进行定位. 元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定. pos ...

  4. java 传入多个参数时报"Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1,..." 解决方案

    @Select("SELECT id FROM ae_post ORDER BY id DESC LIMIT #{page},#{size}") List<Post> ...

  5. StringUtils里的isEmpty和isBlank的区别

    这边首先以一个简单的测试代码来解释这两者的区别: @Test void stringTest(){ String a = " "; boolean empty = StringUt ...

  6. USACO06JAN The Cow Prom /// tarjan求强联通分量 oj24219

    题目大意: n个点 m条边的图 求大小大于1的强联通分量的个数 https://www.cnblogs.com/stxy-ferryman/p/7779347.html tarjan求完强联通分量并染 ...

  7. USACO2005 Cow Acrobats /// 前缀和 oj23402

    题目大意: N (1 ≤ N ≤ 50,000)头牛叠罗汉 找到最优排序使所有牛的风险值总和最小 每头牛重量 (1 ≤ Wi ≤ 10,000) 力量 (1 ≤ Si ≤ 1,000,000,000) ...

  8. 【bug】使用element-ui遇到在IE浏览器中点击enter会回到登录页

    1.点击el-input框,会回到登录页(IE浏览器) 外层是el-table/el-form/el-input 添加可以解决 <el-form onSubmit="return fa ...

  9. stelller插件与background-attachment配合使用,制作滚动页面

    stelller插件与background-attachment:fixed配合使用,制作滚动页面

  10. 1分钟k线图能反映什么?(转)

    对于投资者特别是短线操作者来讲,应该重视1分钟K线图,但是并不是所有的股票都能通过1分钟K线图看出名堂来,比如一些小盘股,盘子较轻,很容易上蹿下跳.仅用1分钟K线图分析其上证指数,很难研判大盘当日的高 ...