由于在android 中的Html源码中对html标签的支持不是很完全,在使用textview加载html自定义字体样式的时候遇到坑了,就是font标签不支持size属性,查看源码中发现没有去解析size属性

// Html源码部分

private static void startFont(SpannableStringBuilder text,

Attributes attributes) {

// 解析颜色

String color = attributes.getValue("", "color");

// 解析face

String face = attributes.getValue("", "face");

int len = text.length();

text.setSpan(new Font(color, face), len, len, Spannable.SPAN_MARK_MARK);

}

所以如下这样写size是没有效果的,只显示颜色

String text = "" + "要显示的数据" + "";

Spanned spanned = Html.fromHtml(text);

==>>>>>>>>>>>>>>>>>>>>>分割线>>>>>>>>>>>>>>>>>>>>>==

由于android对html标签解析最终也是通过各种span进行拼接形成对应的样式:

以下是android中提供的各种span及用途

BackgroundColorSpan 背景色

ClickableSpan 文本可点击,有点击事件

ForegroundColorSpan 文本颜色(前景色)

MaskFilterSpan修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)

MetricAffectingSpan 父类,一般不用

RasterizerSpan 光栅效果

StrikethroughSpan 删除线(中划线)

SuggestionSpan 相当于占位符

UnderlineSpan 下划线

AbsoluteSizeSpan 绝对大小(文本字体)

DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。

ImageSpan 图片

RelativeSizeSpan 相对大小(文本字体)

ReplacementSpan 父类,一般不用

ScaleXSpan 基于x轴缩放

StyleSpan 字体样式:粗体、斜体等

SubscriptSpan 下标(数学公式会用到)

SuperscriptSpan 上标(数学公式会用到)

TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)

TypefaceSpan 文本字体

URLSpan 文本超链接

接下来我们就通过Html.TagHandler来自定义标签实现设置字体大小的功能

此处我定义标签名为:myfont

此处的调用方式如下:

String text = "" + "要显示的数据" + "";

Spanned spanned = Html.fromHtml(text, null, new HtmlTagHandler("myfont"));

关键代码在HtmlTagHandler里面处理自定义标签myfont:

public class HtmlTagHandler implements Html.TagHandler {

// 自定义标签名称

private String tagName;

// 标签开始索引

private int startIndex = 0;

// 标签结束索引

private int endIndex = 0;

// 存放标签所有属性键值对

final HashMap attributes = new HashMap<>();

public HtmlTagHandler(String tagName) {

this.tagName = tagName;

}

@Override

public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {

// 判断是否是当前需要的tag

if (tag.equalsIgnoreCase(tagName)) {

// 解析所有属性值

parseAttributes(xmlReader);

if (opening) {

startHandleTag(tag, output, xmlReader);

}

else {

endEndHandleTag(tag, output, xmlReader);

}

}

}

public void startHandleTag(String tag, Editable output, XMLReader xmlReader) {

startIndex = output.length();

}

public void endEndHandleTag(String tag, Editable output, XMLReader xmlReader) {

endIndex = output.length();

// 获取对应的属性值

String color = attributes.get("color");

String size = attributes.get("size");

size = size.split("px")[0];

// 设置颜色

if (!TextUtils.isEmpty(color)) {

output.setSpan(new ForegroundColorSpan(Color.parseColor(color)), startIndex, endIndex,

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

}

// 设置字体大小

if (!TextUtils.isEmpty(size)) {

output.setSpan(new AbsoluteSizeSpan(Integer.parseInt(size)), startIndex, endIndex,

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

}

}

/** * 解析所有属性值 * *@param xmlReader */

private void parseAttributes(final XMLReader xmlReader) {

try {

Field elementField = xmlReader.getClass().getDeclaredField("theNewElement");

elementField.setAccessible(true);

Object element = elementField.get(xmlReader);

Field attsField = element.getClass().getDeclaredField("theAtts");

attsField.setAccessible(true);

Object atts = attsField.get(element);

Field dataField = atts.getClass().getDeclaredField("data");

dataField.setAccessible(true);

String[] data = (String[]) dataField.get(atts);

Field lengthField = atts.getClass().getDeclaredField("length");

lengthField.setAccessible(true);

int len = (Integer) lengthField.get(atts);

for (int i = 0; i < len; i++) {

attributes.put(data[i * 5 + 1], data[i * 5 + 4]);

}

} catch (Exception e) {

}

}

}

如果以下方式没有效果:

String text = "" + "要显示的数据" + "";

Spanned spanned = Html.fromHtml(text, null, new HtmlTagHandler("myfont"));

可在myfont标签前面添加一个随意标签实现如:

String text = "

" + "要显示的数据" + "

";

Spanned spanned = Html.fromHtml(text, null, new HtmlTagHandler("myfont"));

如果不想自定义tag显示字体大小和颜色可参考

android html字体大小,android Html.fromHtml font 标签支持设置字体大小和颜色相关推荐

  1. android界面设计字体大小,Andoird用户界面设计上手指南:设置字体大小

    教程详解 技术应用: AndroidOS / Android SDK 难易程度: 简单 预计完成时间: 15分钟 [51CTO译文]在本文中,我们将介绍一些简单的处理方式,帮助开发人员轻松编写出能够应 ...

  2. android 代码设置密码,android-如何在MIFARE Ultralight EV1标签上设置和取消设置密码?...

    我想使用NfcA在MIFARE Ultralight EV1(MFOUL21)标签上设置和取消设置密码保护吗? Android上的标签技术. 我知道我会为此使用nfcA.transceive()方法, ...

  3. 手机计算机字体变大,大师应对手机百度如何设置字体大小?

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到手机百度如何设置字体大小?的问题,如果我们遇到了手机百度如何设置字体大小?的情况,该怎么处理怎么才能解决手机百度如何设置 ...

  4. 设置字体大小用css的哪个属性,css设置字体大小的属性名是什么

    css设置字体大小的属性名是"font-size",该属性使用css中表示尺寸的单位(px.em.rem等)设置字体大小,也可以使用百分号等单位来设置.实际上font-size设置 ...

  5. html字体高度怎么调,当在CSS中设置字体大小时,字母的真实高度是多少?

    关于这个问题的一些背景 在金属上创建信件时,em指的是每个块的尺寸,该字母将被刻上,这个大小由资本M确定,因为它通常占用最多的空间. 现在有一天,字体开发者在计算机上创建自己的字体,而没有物理金属的限 ...

  6. java 生成字体文件,java使用itext生成pdf文件-设置字体,itextpdf,import com.l

    java使用itext生成pdf文件-设置字体,itextpdf,import com.limport com.lowagie.text.Document;import com.lowagie.tex ...

  7. matplotlib图例中文乱码? 标题部分可以通过设置字体属性解决,但是图例不支持设置字体,该如何解决

  8. html字体修改微软字体大小,css设置字体(css怎么调整字体大小)

    一般字体的设置包含:字体,字体大小,字体颜色 html设置字体的话有很多标签去设置1. h1,h2,h3,h4,h5,h6 标题 其中 定义最大的标题. 定义最小的标题.2. 采用. 用Css设置整个 ...

  9. Markdown如何设置字体颜色加粗倾斜

    字体加粗和倾斜设置 Markdown中的字体格式有如下几种: 字体加粗:在字体前后各加两个星号**或两个下划线_ **字体加粗** __字体加粗__ 字体倾斜:在字体前后各加一个星号**或一个下划线_ ...

最新文章

  1. 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
  2. VB访问SQL Server数据库技术全揭密
  3. 如何实现数据跨链交互?
  4. 超硬核!数据结构学霸笔记,考试面试吹牛就靠它
  5. Java VM: Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode windows-amd64 compressed oops)
  6. 计算机删除程序后不能上网,把所有驱动程序全部卸载后电脑还能用吗?还能 – 手机爱问...
  7. Linux获取外网IP
  8. oeasy教您玩转python - 003 - # - 继续运行
  9. 使用SublimeREPL 出现系统找不到指定文件
  10. python--22 类和对象
  11. 【游戏设计】3D坦克大战
  12. 【安全】靶场实战-通过MS16-032提权
  13. 竟然在GitHub标星27k+阿里大牛肝出的443页TCP/IP协议趣谈笔记,有何神奇之处?
  14. chromecast 协议_如何删除Chromecast的网络范围内的Android通知
  15. 全国计算机照片怎么弄,证件照电子版怎么弄-制作证件照其实很简单,用excel就行,2分钟搞定...
  16. 数据库建模三步骤:概念模型-逻辑模型-物理模型
  17. setTimeout 的黑魔法
  18. 1076: [SCOI2008]奖励关
  19. 阿里云海外服务器地域及所在城市国家对照表
  20. mysql数字大小排序函数_mysql按照数字大小排序的方法

热门文章

  1. web静态网页-爱心公益小站
  2. NDK-r25交叉编译glib-2.73.3
  3. Linux下批量ping ip地址
  4. C语言 剧情版小游戏
  5. git代码从A库某分支迁到B库某分支(亲测有效)
  6. 文字特效JS代码,演示:
  7. QQ Tim另存为文件时闪退,错误模块ntdll.dll
  8. benson邀请您访问互助联盟建站之家
  9. Oracle 基于用户管理恢复的处理
  10. 游戏中常用的设计模式