android html字体大小,android Html.fromHtml font 标签支持设置字体大小和颜色
由于在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 标签支持设置字体大小和颜色相关推荐
- android界面设计字体大小,Andoird用户界面设计上手指南:设置字体大小
教程详解 技术应用: AndroidOS / Android SDK 难易程度: 简单 预计完成时间: 15分钟 [51CTO译文]在本文中,我们将介绍一些简单的处理方式,帮助开发人员轻松编写出能够应 ...
- android 代码设置密码,android-如何在MIFARE Ultralight EV1标签上设置和取消设置密码?...
我想使用NfcA在MIFARE Ultralight EV1(MFOUL21)标签上设置和取消设置密码保护吗? Android上的标签技术. 我知道我会为此使用nfcA.transceive()方法, ...
- 手机计算机字体变大,大师应对手机百度如何设置字体大小?
电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到手机百度如何设置字体大小?的问题,如果我们遇到了手机百度如何设置字体大小?的情况,该怎么处理怎么才能解决手机百度如何设置 ...
- 设置字体大小用css的哪个属性,css设置字体大小的属性名是什么
css设置字体大小的属性名是"font-size",该属性使用css中表示尺寸的单位(px.em.rem等)设置字体大小,也可以使用百分号等单位来设置.实际上font-size设置 ...
- html字体高度怎么调,当在CSS中设置字体大小时,字母的真实高度是多少?
关于这个问题的一些背景 在金属上创建信件时,em指的是每个块的尺寸,该字母将被刻上,这个大小由资本M确定,因为它通常占用最多的空间. 现在有一天,字体开发者在计算机上创建自己的字体,而没有物理金属的限 ...
- java 生成字体文件,java使用itext生成pdf文件-设置字体,itextpdf,import com.l
java使用itext生成pdf文件-设置字体,itextpdf,import com.limport com.lowagie.text.Document;import com.lowagie.tex ...
- matplotlib图例中文乱码? 标题部分可以通过设置字体属性解决,但是图例不支持设置字体,该如何解决
- html字体修改微软字体大小,css设置字体(css怎么调整字体大小)
一般字体的设置包含:字体,字体大小,字体颜色 html设置字体的话有很多标签去设置1. h1,h2,h3,h4,h5,h6 标题 其中 定义最大的标题. 定义最小的标题.2. 采用. 用Css设置整个 ...
- Markdown如何设置字体颜色加粗倾斜
字体加粗和倾斜设置 Markdown中的字体格式有如下几种: 字体加粗:在字体前后各加两个星号**或两个下划线_ **字体加粗** __字体加粗__ 字体倾斜:在字体前后各加一个星号**或一个下划线_ ...
最新文章
- 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
- VB访问SQL Server数据库技术全揭密
- 如何实现数据跨链交互?
- 超硬核!数据结构学霸笔记,考试面试吹牛就靠它
- Java VM: Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode windows-amd64 compressed oops)
- 计算机删除程序后不能上网,把所有驱动程序全部卸载后电脑还能用吗?还能 – 手机爱问...
- Linux获取外网IP
- oeasy教您玩转python - 003 - # - 继续运行
- 使用SublimeREPL 出现系统找不到指定文件
- python--22 类和对象
- 【游戏设计】3D坦克大战
- 【安全】靶场实战-通过MS16-032提权
- 竟然在GitHub标星27k+阿里大牛肝出的443页TCP/IP协议趣谈笔记,有何神奇之处?
- chromecast 协议_如何删除Chromecast的网络范围内的Android通知
- 全国计算机照片怎么弄,证件照电子版怎么弄-制作证件照其实很简单,用excel就行,2分钟搞定...
- 数据库建模三步骤:概念模型-逻辑模型-物理模型
- setTimeout 的黑魔法
- 1076: [SCOI2008]奖励关
- 阿里云海外服务器地域及所在城市国家对照表
- mysql数字大小排序函数_mysql按照数字大小排序的方法