TextView显示带有自定义标签的HTML

首先新建一个类实现TagHandler接口,里面的handleTag,是专门用来处理自定义标签。
handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader)
opening:表示是否是标签起始
tag: 标签名
output: 内容
xmlReader:xml

如果要使用自定义标签的属性只能使用反射了。
public class MyTagHandler implements TagHandler {
	private int startIndex = 0;
	private int stopIndex = 0;

	@Override
	public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
		if (tag.toLowerCase().equals("tag")) {
			if (opening) {
				startGame(tag, output, xmlReader);
			} else {
				endGame(tag, output, xmlReader);
			}
		}
	}

	public void startGame(String tag, Editable output, XMLReader xmlReader) {
		startIndex = output.length();
		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);
			String myAttributeA = null;
			String myAttributeB = null;
			for (int i = 0; i < len; i++) {
				// 这边的src和type换成你自己的属性名就可以了
				if ("href".equals(data[i * 5 + 1])) {
					myAttributeA = data[i * 5 + 4];
				}
			}
			Log.i("log", "src: " + myAttributeA + " type: " + myAttributeB);
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}

	public void endGame(String tag, Editable output, XMLReader xmlReader) {
		stopIndex = output.length();
		output.setSpan(new GameSpan(), startIndex, stopIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
	}

	private class GameSpan extends ClickableSpan {
		@Override
		public void onClick(View v) {
			Log.e("my", "click");
		}
	}
}

来自: http://www.wl566.com/biancheng/93301.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值