2016-07-07 152 views
0

我需要監聽某種終端仿真的按鍵。所以我沒有任何EditText。但我成功查詢輸入鍵在Android軟鍵盤中不起作用

public class Click implements View.OnClickListener 
    { 
    @Override 
    public void onClick (View view) 
     { 
     CursorText terminal = (CursorText) findViewById (R.id.term_window); 
     InputMethodManager manager; 
     manager = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); 
     manager.showSoftInput (terminal, InputMethodManager.SHOW_FORCED); 
     } 
    } 

產卵軟鍵盤變量terminal這裏是一個自定義類CursorText是從TextView衍生的一個實例。它具有屬性android:textIsSelectable="true",因此它接受點擊。否則它有android:imeOptions="flagNoExtractUi|flagForceAscii",但這些似乎沒有任何不利影響。

我的問題現在正在接收按鍵。在調查API文檔時,它看起來好像沒有可靠的方式,就像在任何相關的文檔中所述,它所描述的類和方法只適用於硬件鍵盤!但一定有辦法。

我已經嘗試了一些方法,其中onKeyListeneronKeyPreIme等等,大多數根本不反應。例如onKeyPreIme需要在View派生類中被覆蓋,在我的情況下,明顯的選擇是類terminal是一個實例。這不是EditText,也許這就是onKeyPreIme永遠不會被調用的原因。我相信在我的情況下,出於同樣的原因,我不能使用TextWatcher

到目前爲止最好的結果是在活動中覆蓋onKeyDown。幾乎每個鍵都會調用這個方法,包括Backspace;一個例外是一個最重要的鍵,即輸入(返回)鍵。我有一種感覺,在我的和處理之前調用其他一些偵聽器方法,但不傳遞Enter鍵事件。我不知道如何找出答案。

我與onKeyDown的其他問題是,它不會產生自動重複持有密鑰。由於它似乎只報告KeyEvent.ACTION_DOWN,但沒有KeyEvent.ACTION_UP,我無法自己創建自動重複。

我想我可以沒有自動重複的生活,但沒有回車鍵是一個表演停止。那麼我如何解鎖回車鍵事件?當按下回車鍵時,什麼可以防止onKeyDown被調用?或者,我是否應該採用完全不同的方式來聽按鍵?

順便說一句。我正在對Lollipop和Kitkat進行測試,在真實硬件上使用CM,在模擬器上使用vintage-Google-Android,試圖支持Jelly Bean。

回答

0

SOftkeyboards很少創建關鍵事件。他們通常通過調用inputConnection.commitText來工作,該函數一次接收整個字符串。要做你想做的事,你需要將InputMethod與視圖綁定,並覆蓋視圖的onCreateInputConnection,以返回可以正確處理commitText的自定義InputConnection。