4

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. 用户单击另一个视图元素 --> 红线/跨度消失。

4

2 回答 2

2

恐怕没有好的方法可以做到这一点。问题是 Android 框架并没有真正的机制来告诉键盘输入类型何时发生变化。键盘通常会在字段打开时检查类型。在那之后,如果类型发生变化,除非它轮询它,否则它不会知道,而且我认为任何现有的键盘都不会这样做。

于 2013-03-15T16:07:35.290 回答
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 的文本时,在文本下显示红线

于 2013-03-16T08:56:43.693 回答