【问题标题】:Redrawing EditText after changing InputType更改 InputType 后重绘 EditText
【发布时间】:2016-04-11 22:43:54
【问题描述】:

我创建了一个类,负责按照观察者模式监视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);
    }

}

【问题讨论】:

    标签: android android-edittext android-inputtype


    【解决方案1】:

    我在查看TextView 的源代码时找到了答案,在那里我遇到了removeSuggestionSpans() 方法。我不知道这些建议实际上是一种跨度,(不出所料,@ 987654322@)

    这意味着我可以使用以下代码删除红色下划线:

    SuggestionSpan[] spans = editText.getText().getSpans(
            0, editText.length(), SuggestionSpan.class
    );
    
    if (spans.length > 0) {
        for (SuggestionSpan span : spans) {
            editText.getText().removeSpan(span);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 2011-07-01
      • 1970-01-01
      相关资源
      最近更新 更多