Android Edittext-清除跨度

时间:2012-02-22 21:10:44

标签: android android-edittext gettext html redraw

我正在尝试通过调用EditText.getText().clearSpans()来获取EditText以清除其跨度。但是,如果我调用此方法,EditText开始表现得很奇怪,换行符显示为方框,然后我设置的任何跨度都位于完全错误的位置。

所以我的问题是:如何清除和EditText的跨度? (不调用setText() - 文本可能长达数千行,而且它太慢而无法经常重绘)

非常感谢!

3 个答案:

答案 0 :(得分:37)

有同样的问题。通过仅删除我添加到EditText的跨距类型来解决它。我想clearSpans删除的比它应该的多。对于我使用的每种类型的跨度,我都做了类似的事情:

toRemoveSpans = et.getSpans(0, et.getText().length(), ForegroundColorSpan.class);
for (int i = 0; i < toRemoveSpans.length; i++) 
    et.removeSpan(toRemoveSpans[i]);

答案 1 :(得分:2)

private void clearSpans(@NonNull final Editable editable) {
    final Object[] spans = editable.getSpans(0, editable.length(), Object.class);
    for (final Object span : spans) {
        if (span instanceof ForegroundColorSpan || span instanceof SpannableTextView.CustomTypefaceSpan) {
            editable.removeSpan(span);
        }
    }
}

根据您添加的跨度类型,您可能不仅需要包括ForegroundColorSpan。上面的方法是替换的简单方法,并且可以轻松指定要删除的跨度。

答案 2 :(得分:0)

最好的答案是“ s”是您要显示的字符串而不是跨度,或者它可以是空字符串。

该代码位于 Kotlin

editText.setText(s)
editText.setSelection(editText.text.length)