終於解決了。
感謝pskink關鍵線索。Important link。
事實上,鍵盤需要從視圖中獲取一些名爲EditorInfo
的東西,這是焦點所在。它允許EditText
與某些inputMethod
正常工作。
所以我們只需要複製該行爲。您可以使用任何視圖。我重寫LinearLayout
,在XML中使用它作爲根ViewGroup中,標記出所有意見
android:focusable="false"
android:focusableInTouchMode="false"
,只有根具有這些標記的「真」。不確定這兩個標籤是否重要。
,那麼你只需要重寫你的觀點
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
也適用於三星鍵盤。
「我有一些看法」 - 什麼看法,一些代碼如果cusrom一個? – pskink
這根本不重要。它可以是'TextView',按下所有按鍵的日誌或'GLSurfaceView'以鍵盤輸入運行遊戲。重要的是屏幕充滿了一些東西,活動處理關鍵事件。 – mjollneer
你的觀點在onCreateInputConnection中返回什麼? – pskink