我正在尝试通过调用EditText.getText().clearSpans()
来获取EditText以清除其跨度。但是,如果我调用此方法,EditText开始表现得很奇怪,换行符显示为方框,然后我设置的任何跨度都位于完全错误的位置。
所以我的问题是:如何清除和EditText的跨度? (不调用setText() - 文本可能长达数千行,而且它太慢而无法经常重绘)
非常感谢!
答案 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)