在Android中关闭not-EditText的autosuggest?

时间:2014-02-27 13:35:03

标签: android

我有一些View填充整个布局。活动在dispatchKeyEvent中侦听键盘事件并对此视图执行某些操作(立即为每个字符执行一次)。但是,如果任何类型的自动完成或自动拼写检查或任何ON - 活动将不会收到任何东西,直到用户提交他的输入。这是不可接受的。

There is solution for EditText

如何使用输入类型EditText(或textFiltertextNoSuggestions

来强制活动/视图,例如'textVisiblePassword)

P.S。我可以在我的布局中的某处放置隐藏的EditText,并且很可能它可以接受。但这可能是一些副作用,解决方案根本不美观。

1 个答案:

答案 0 :(得分:0)

终于解决了。

感谢pskink的关键线索。 Important link

事实是键盘需要从视图中获取一些名为EditorInfo的东西,这是焦点。它允许EditText某些inputMethod正常工作。

所以我们只需要复制那种行为。您可以使用任何视图。我有覆盖LinearLayout,在xml中将其用作root viewGroup,并将所有视图标记为

android:focusable="false"
android:focusableInTouchMode="false"

并且只有root标签为“true”。不确定两个标签是否都很重要。

然后你只需要覆盖视图中的两个方法

public boolean onCheckIsTextEditor() {
    return true;
}

public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    outAttrs.inputType = InputType.TYPE_CLASS_TEXT |
        InputType.TYPE_TEXT_VARIATION_PASSWORD |
        InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD |
        InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS |
        InputType.TYPE_TEXT_FLAG_MULTI_LINE;
    outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION;

    return new super.onCreateInputConnection(outAttrs)
}

这将解决大多数问题。还有一些不正确实现的键盘(例如表情符号键盘(03/03/14))忽略了EditorInfo。如果您愿意 - 您可以使用自定义InputConnection克服此问题,extends BaseInputConnection - 只需覆盖

public boolean setComposingText(CharSequence text, int newCursorPosition)

你会得到每个作曲事件的回调。不太舒服,但至少起作用。并且必须从视图的

返回此自定义InputConnection
public InputConnection onCreateInputConnection(EditorInfo outAttrs)

UPD1。自定义InputConnection也适用于三星键盘。