3
spanned = Html.fromHtml("<sup>aaa</sup>bbb<sub>ccc</sub><b>ddd</b>");

将创建一个具有 3 个跨度aaaccc、的 Spanned 对象ddd

bbb被忽略,因为它不在 html 标记内,

spans = spanned.getSpans(0, spanned.length(), Object.class);

只会识别 3 个跨度。

我需要一种方法来提取代码的所有 4 部分,如果可能的话,提取到某种数组中,这样我就可以识别每个跨度的类型。

4

3 回答 3

4

我需要一种方法来提取代码的所有 4 部分

用于nextSpanTransition()查找下一个跨度的起点。您的初始位置( 的第一个参数nextSpanTransition())和下一个跨度之间的字符表示文本的未跨度部分。

您可以查看上的方法的源代码,toHtml()Html以了解这一点。

于 2013-10-13T13:14:18.027 回答
0

'bbb' 是不在 html 标签内的那个。尽管我猜它不会被错过。'ccc' 是一个下标,可能是它被渲染但对你不可见。如果您限制了它,请尝试增加 textview 的高度。

于 2013-10-13T13:09:12.867 回答
0

使用这个http://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String , android.text.Html.ImageGetter, android.text.Html.TagHandler),为ImageGetter 和您的自定义 TagHandler

看例子

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 ");
于 2013-10-13T13:37:33.270 回答