我创建了一个类,负责监视Observer模式后的EditText
小部件。它的唯一功能是根据方法调用禁用或重新启用自动更正。我能够成功实现这一点,但问题是新的InputType
仅适用于我添加到EditText
的新文本 - 旧文本仍然保留红色下划线以表明它可以是自动的校正。
有什么方法可以强制新的InputType
应用于整个EditText
块,而不仅仅是我添加的新内容?我试着调用editText.invalidate()
和editText.refreshDrawableState()
,希望所有文字都能刷新,但无济于事。
final class SpellCheckerObserver implements EditTextObserver {
public static final int KEY = KeyGenerator.generateUniqueId();
private int defaultInputType;
SpellCheckerObserver(EditTextSubject subject) {
subject.attach(SpellCheckerObserver.KEY, this);
}
@Override
public void activating(EditText editText) {
defaultInputType = editText.getInputType();
editText.setRawInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
}
@Override
public void deactivating(EditText editText) {
editText.setInputType(defaultInputType);
}
}
答案 0 :(得分:1)
我在查看TextView
的源代码时找到了答案,在那里我遇到了removeSuggestionSpans()
方法。我不知道这些建议实际上是一种跨度,(不出所料,SuggestionSpan
)
这意味着我可以使用以下代码删除红色下划线:
SuggestionSpan[] spans = editText.getText().getSpans(
0, editText.length(), SuggestionSpan.class
);
if (spans.length > 0) {
for (SuggestionSpan span : spans) {
editText.getText().removeSpan(span);
}
}