2014-02-27 29 views
0

我有一些View填充整個佈局。活動在dispatchKeyEvent中監聽鍵盤事件並對該視圖執行某些操作(立即爲每個字符執行一次操作)。但是,如果任何類型的自動完成或自動拼寫檢查或任何ON - 活動在用戶提交輸入之前都不會收到任何內容。這是不可接受的。在Android中關閉autosuggest for not-EditText?

There is solution for EditText

我能做些什麼來迫使活動/視圖的行爲像EditText與輸入型textFilter(或textNoSuggestions,或'textVisiblePassword)

PS我可以把我的佈局隱藏EditText的地方,最有可能它會工作可以接受的。但這裏可能有一些副作用,解決的辦法是不美的。

+0

「我有一些看法」 - 什麼看法,一些代碼如果cusrom一個? – pskink

+0

這根本不重要。它可以是'TextView',按下所有按鍵的日誌或'GLSurfaceView'以鍵盤輸入運行遊戲。重要的是屏幕充滿了一些東西,活動處理關鍵事件。 – mjollneer

+1

你的觀點在onCreateInputConnection中返回什麼? – pskink

回答

0

終於解決了。

感謝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也適用於三星鍵盤。