我有一些View
填充整个布局。活动在dispatchKeyEvent
中侦听键盘事件并对此视图执行某些操作(立即为每个字符执行一次)。但是,如果任何类型的自动完成或自动拼写检查或任何ON - 活动将不会收到任何东西,直到用户提交他的输入。这是不可接受的。
There is solution for EditText
如何使用输入类型EditText
(或textFilter
或textNoSuggestions
'textVisiblePassword)
?
P.S。我可以在我的布局中的某处放置隐藏的EditText
,并且很可能它可以接受。但这可能是一些副作用,解决方案根本不美观。
答案 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
也适用于三星键盘。