更改InputType后重绘EditText

时间:2016-01-07 13:54:05

标签: android android-edittext android-inputtype

我创建了一个类,负责监视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);
    }

}

1 个答案:

答案 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);
    }
}