html 矢量字体不显示,TextView加载Html无法显示字体大小

如题,我在实际工作中遇到的情况,查阅相关资料,安卓的setText(Html.fromHtml(source))不支持font、span中的size,用style样式也不行。

直接上代码,自定义一个TagHandler ,继承Html.TagHandler

public class HtmlSizeTag implements Html.TagHandler {

private String tagName;

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

final HashMap attributes = new HashMap<>();

private int startIndex = 0;

private int endIndex = 0;

public HtmlSizeTag(String tagName) {

this.tagName = tagName;

}

@Override

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

if(tag.toLowerCase().equals(tagName)) {

// 解析所有属性值

parseAttributes(xmlReader);

if(opening){

startIndex = output.length();

}else{

endEndHandleTag(output,xmlReader);

}

}

}

public void endEndHandleTag( 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);

}

}

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 html="" + txt + "";

textview.setText(Html.fromHtml(html, null, new HtmlSizeTag("myfont")));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值