spanned = Html.fromHtml("<sup>aaa</sup>bbb<sub>ccc</sub><b>ddd</b>");
将创建一个包含3个跨度aaa
,ccc
,ddd
的跨区对象。
bbb
被忽略,因为它不在html标记内,
spans = spanned.getSpans(0, spanned.length(), Object.class);
只能确定3个跨度。
我需要一种方法来提取代码的所有4个部分,如果可能的话,将某种数组提取出来,以便我识别每个范围的类型。
答案 0 :(得分:4)
我需要一种方法来提取代码的所有4个部分
Use nextSpanTransition()
找到下一个跨度的起点。您的初始位置(第一个参数到nextSpanTransition()
)和下一个范围之间的字符代表文本的未缩放部分。
您可以查看the source code to the toHtml()
method on the Html
class以查看此操作。
答案 1 :(得分:0)
'bbb'是不在html标签内的那个。虽然我猜它不会错过。 'ccc'是下标,可能是渲染但不可见。如果限制它,请尝试增加textview高度。
答案 2 :(得分:0)
使用此http://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String,android.text.Html.ImageGetter,android.text.Html.TagHandler),为ImageGetter和您的自定义TagHandler传递null
参见示例
String source = "<b>bold</b> <i>italic</i> <unk>unknown</unk>";
TagHandler tagHandler = new TagHandler() {
Stack<Integer> starts = new Stack<Integer>();
@Override
public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
if (tag.equals("unk")) {
if (opening) {
starts.add(output.length());
} else {
int start = starts.pop();
int end = output.length();
Object what = new Object();
output.setSpan(what, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
};
Spanned spanned = Html.fromHtml(source, null, tagHandler);
TextUtils.dumpSpans(spanned, new LogPrinter(Log.DEBUG, TAG), "span ");