如何在android中设置0长度的ParagraphStyle跨度

问题描述

我正在使用 android spans 实现富编辑器。 我创建了复选框跨度。这扩展了扩展ParagraphStyle 接口的LeadingMarginSpan。 我的问题是我必须将此跨度设置为空文本。 例如,对于“\n\n\n”,我必须设置 (0,0)、(1,1)、(2,2)、(3,3) 表示跨度范围。将有 4 个复选框。 但是,android 不支持 0 长度的段落样式。当我看到 android.text.spannablestringbuilder 时,函数“nextSpanTransitionRec”就像这段代码

private int nextSpanTransitionRec(int start,int limit,Class kind,int i) {
        if ((i & 1) != 0) {
            // internal tree node
            int left = leftChild(i);
            if (resolveGap(mSpanMax[left]) > start) {
                limit = nextSpanTransitionRec(start,limit,kind,left);
            }
        }
        if (i < mSpanCount) {
            int st = resolveGap(mSpanStarts[i]);
            int en = resolveGap(mSpanEnds[i]);
            if (st > start && st < limit && kind.isinstance(mSpans[i]))
                limit = st;
            if (en > start && en < limit && kind.isinstance(mSpans[i]))
                limit = en;
            if (st < limit && (i & 1) != 0) {
                limit = nextSpanTransitionRec(start,rightChild(i));
            }
        }

        return limit;
    }

我不明白为什么 android 不支持这个用例。 还有一个问题。 android.text.layout 有这个方法

/* package */static <T> T[] getParagraphSpans(Spanned text,int start,int end,Class<T> type) {
        if (start == end && start > 0) {
            return ArrayUtils.emptyArray(type);
        }

        if(text instanceof SpannableStringBuilder) {
            return ((SpannableStringBuilder) text).getSpans(start,end,type,false);
        } else {
            return text.getSpans(start,type);
        }
    }

如果段落样式跨度在缓冲区的末尾并且长度为0,则框架返回空跨度。 我试图定制它们。但这些功能是私有的。我需要几个月的时间来解决这个问题。

我认为一些应用实现了这个用例。所以我认为会有解决方案。但几个月后我找不到它。有没有办法实现这个用例?

请救救我...T^T

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...