android解析html5,HtmlSpanner 使用小结 -- 安卓解析html

本文介绍了如何使用HtmlSpanner在Android应用中解析HTML格式的字符串,包括从GitHub下载项目、引入依赖以及使用方法。在实际使用中遇到RGB颜色格式无法解析的问题,通过查看源码发现HtmlSpanner不支持RGB格式,因此提供了一个工具类ColorUtil,将RGB转换为HEX格式来解决这个问题。该方法能够帮助开发者在展示HTML富文本时正确处理颜色样式。
摘要由CSDN通过智能技术生成

如何利用 HtmlSpanner解析 HTML格式 的字符串:

1. GitHub 下载HtmlSpanner项目https://github.com/NightWhistler/HtmlSpanner

2. 最好是直接放在java目录下在,这样不需要改引用的包路径

09f7c7c3d01bcdf022eef0c6299bb6f8.png

3.  引入需要的依赖包

96900d3493bd6a27df2d9e93d6ef609b.png

implementation 'net.sourceforge.htmlcleaner:htmlcleaner:2.21'

implementation 'com.osbcp:cssparser:1.7'

4. 使用方法:

69aa6ca2ef1ce88a54e5c4bc2342e617.png

// 页面上用于展示 html格式的文本布局

TextView textView = findViewById(R.id.htmlSpanner);

// 直接 new一个 HtmlSpanner对象

HtmlSpanner htmlSpanner = new HtmlSpanner(); // 格式化

// 解析 html得到 spannable对象

Spannable spannable1 = htmlSpanner.fromHtml("html格式的文字1");

// 显示到 TextView上

textView.setText(spannable1);

5. 在使用中遇到的问题——当富文本中颜色格式是rgb格式,解析失败

928f15471a86248d8e143e2f82c75357.png

7fab96ef8c1a7ad3b001f3a1a226d281.png

265a325aa80cc292a15801cb0d985ca2.png

解决思路:

1. 首先我们解析的是style='color:rgb(0,255,255)' 这种格式,于是看源码觉得 CSSCompiler 这个类很有问题

2. 找与颜色相关的于是就找到了 parseCSSColor( String colorString ) 这个方法,看起来就是转换颜色用的

3. 源码的写法如下:(是没有对于rgb格式的算法,所以不能解析就很合理啦)

d3b256ca465c3cfcc721f9614152bcf2.png

4. 想法修改:( 遇到 0rgb格式就先处理成我们的 hex格式,这样不就完美了嘛 )

5fc968807a398ddcada4fc5201c3b6d1.png

5. 工具类代码如下:

package com.xxx.xxx.xxx;

public class ColorUtil {

/**

* rgb 格式的颜色转 hex格式颜色

* @param rgb

* @return

*/

public static String rgb2hex(String rgb) {

int r = 0;

int g = 0;

int b = 0;

int left = rgb.indexOf("(");

int right = rgb.indexOf(")");

if (left > -1 && right > -1 && right > left) {

String substring = rgb.substring(left + 1, right);

String[] split = substring.split(",");

if (split.length == 3){

r = Integer.valueOf(split[0].trim());

g = Integer.valueOf(split[1].trim());

b = Integer.valueOf(split[2].trim());

}

}

String rFString, rSString, gFString, gSString,

bFString, bSString, result;

int red, green, blue;

int rred, rgreen, rblue;

red = r / 16;

rred = r % 16;

if (red == 10) rFString = "A";

else if (red == 11) rFString = "B";

else if (red == 12) rFString = "C";

else if (red == 13) rFString = "D";

else if (red == 14) rFString = "E";

else if (red == 15) rFString = "F";

else rFString = String.valueOf(red);

if (rred == 10) rSString = "A";

else if (rred == 11) rSString = "B";

else if (rred == 12) rSString = "C";

else if (rred == 13) rSString = "D";

else if (rred == 14) rSString = "E";

else if (rred == 15) rSString = "F";

else rSString = String.valueOf(rred);

rFString = rFString + rSString;

green = g / 16;

rgreen = g % 16;

if (green == 10) gFString = "A";

else if (green == 11) gFString = "B";

else if (green == 12) gFString = "C";

else if (green == 13) gFString = "D";

else if (green == 14) gFString = "E";

else if (green == 15) gFString = "F";

else gFString = String.valueOf(green);

if (rgreen == 10) gSString = "A";

else if (rgreen == 11) gSString = "B";

else if (rgreen == 12) gSString = "C";

else if (rgreen == 13) gSString = "D";

else if (rgreen == 14) gSString = "E";

else if (rgreen == 15) gSString = "F";

else gSString = String.valueOf(rgreen);

gFString = gFString + gSString;

blue = b / 16;

rblue = b % 16;

if (blue == 10) bFString = "A";

else if (blue == 11) bFString = "B";

else if (blue == 12) bFString = "C";

else if (blue == 13) bFString = "D";

else if (blue == 14) bFString = "E";

else if (blue == 15) bFString = "F";

else bFString = String.valueOf(blue);

if (rblue == 10) bSString = "A";

else if (rblue == 11) bSString = "B";

else if (rblue == 12) bSString = "C";

else if (rblue == 13) bSString = "D";

else if (rblue == 14) bSString = "E";

else if (rblue == 15) bSString = "F";

else bSString = String.valueOf(rblue);

bFString = bFString + bSString;

result = "#" + rFString + gFString + bFString;

return result;

}

}

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[HtmlSpanner 使用小结 -- 安卓解析html]http://www.zyiz.net/tech/detail-94997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值