android img标签属性_Android富文本Html源码详细解析

原标题:Android富文本Html源码详细解析

前言

Html能够通过Html标签来为文字设置样式,让TextView显示富文本信息,其只支持部分标签不是全部,具体支持哪些标签将分析中揭晓。

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.tv_html); String htmlString = "颜色
" + "链接<>br/>" + "大字体
"+ "小字体
"+ "加粗
"+ "斜体
" + "

标题一

" + "

标题二

" + "" + "
引用
" + "
" + " 下划线
" + " 上标正常字体 下标
" + " 样式"; textView.setText(Html.fromHtml(htmlString));}

由此可以看出Html还是比较强大的一个东西呀!

使用Html.toHtml方法能够将带有样式效果的Spanned文本对象生成对应的Html格式,标签内的字符会被转译成,下面为WebView显示效果,部分效果与上面TextView显示的效果有差异,代码如下:

webView.loadData(Html.toHtml(Html.fromHtml(htmlString)),"text/html", "utf-8");

显示效果还是有点差距的,用的是安卓4.0.3的手机系统,所以可能显示上有点问题,不过应该不影响大家区分。重点毕竟不在这里,大家继续往下看原理吧!

原理分析

/** * 为标签提供图片检索功能 */

publicstaticinterfaceImageGetter{

/** * 当HTML解析器解析到标签时,source参数为标签中的src的属性值, * 返回值必须为Drawable;如果返回null则会使用小方块来显示,如前面所见, * 并需要调用Drawable.setBounds()方法来设置大小,否则无法显示图片。 * @paramsource: */publicDrawable getDrawable(String source);}

/*** HTML标签解析扩展接口*/

publicstaticinterfaceTagHandler{

/** * 当解析器解析到本身不支持或用户自定义的标签时,该方法会被调用 * @paramopening:标签是否打开 * @paramtag:标签名 * @paramoutput:截止到当前标签,解析到的文本内容 * @paramxmlReader:解析器对象 */publicvoid handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader);}

privateHtml() { }

/** * 返回样式文本,所有标签都会显示为一个小方块 * 使用TagSoup库处理HTML * @paramsource:带有html标签字符串 */

publicstaticSpanned fromHtml(String source) {

returnfromHtml(source, null, null);}

/*** 可传入ImageGetter来获取图片源,TagHandler添加支持其他标签*/

publicstaticSpanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler) { .....}

/*** 将带样式文本反向解析成带Html的字符串,注意这个方法并不是还原成fromHtml接收的带Html标签文本*/

publicstaticString toHtml(Spanned text) { StringBuilder out = newStringBuilder(); withinHtml(out, text);

returnout.toString();}

/*** 返回转译标签后的字符串*/

publicstaticString escapeHtml(CharSequence text) { StringBuilder out = newStringBuilder(); withinStyle(out, text, 0, text.length());

returnout.toString();}

/*** 懒加载HTML解析器的Holder* a) zygote对其进行预加载* b) 直到需要的时候才加载*/privatestaticclassHtmlParser{

privatestaticfinalHTMLSchema schema = newHTMLSchema();}。。。。

fromHtml(String source, ImageGetter imageGetter,TagHandler tagHandler):

Html类主要方法就4个,功能也简单,生成带样式的fromHtml方法最终都是调用重载3个参数的方法。

publicstaticSpanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler){

//初始化解析器Parser parser = newParser();

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值