首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -分解一个跨对象

Android -分解一个跨对象
EN

Stack Overflow用户
提问于 2013-10-13 12:59:45
回答 3查看 1.8K关注 0票数 3
代码语言:javascript
复制
spanned = Html.fromHtml("<sup>aaa</sup>bbb<sub>ccc</sub><b>ddd</b>");

将创建一个具有3跨aaacccddd的跨对象。

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

代码语言:javascript
复制
spans = spanned.getSpans(0, spanned.length(), Object.class);

将只识别3个跨度。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-13 13:14:18

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

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

您可以通过查看 class来查看此操作。

票数 4
EN

Stack Overflow用户

发布于 2013-10-13 13:09:12

‘'bbb’不是html标签中的那个。尽管我想这是不会被错过的。“‘ccc”是一个下标,它可能是呈现的,但对您来说是不可见的。如果您限制了文本视图的高度,尝试增加它的高度。

票数 0
EN

Stack Overflow用户

发布于 2013-10-13 13:37:33

使用此http://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String,为ImageGetter和自定义TagHandler传递null

见示例

代码语言:javascript
复制
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 ");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19345539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档