EditText:切换InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

时间:2013-03-06 21:08:33

标签: android android-edittext

我通过扩展EditText创建了自定义android.widget.EditText

EditText具有焦点时,我希望仅显示自动正确的跨度。所以我在构造函数中调用setInputType(INPUT_NO_FOCUS);并且:

@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
    super.onFocusChanged(focused, direction, previouslyFocusedRect);
    if (focused) {
        setInputType(INPUT_FOCUS);
    } else {
        setInputType(INPUT_NO_FOCUS);
    }
}

使用:

private final int INPUT_NO_FOCUS = TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE
        | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
private final int INPUT_FOCUS = TYPE_CLASS_TEXT | TYPE_TEXT_FLAG_MULTI_LINE
        | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLET;

==>确实没有自动更正和自动完成,但在点击EditText后不会显示。输入类型已成功更改。

如何触发自动更正/添加自动完成功能?

//编辑:

用户案例我想存档:

    显示
  1. MyEditText extends EditText视图但未关注。文本上没有拼写检查( - >文本下没有红色跨度/行)

  2. 用户点击编辑字段即可。 - >拼写检查被触发 - >出现红线(用户可以点击拼写错误的单词并让操作系统更正)

  3. 用户点击另一个View元素 - >红线/跨度消失。

2 个答案:

答案 0 :(得分:2)

我担心没有好办法做到这一点。问题是Android框架实际上没有一种机制来在输入类型发生变化时告诉键盘。键盘通常在字段打开时检查类型。在那之后,如果类型改变,它将不会知道,除非它轮询它,我不认为任何现有的键盘这样做。

答案 1 :(得分:0)

在MyEditText类中重写此方法

@Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        setInputType(INPUT_FOCUS);
    }

使用此方法,您可以将EditText的inputType更改为INPUT_FOCUS,当用户编辑MyEditText的文本时,该文本在文本下显示红线