我需要監聽某種終端仿真的按鍵。所以我沒有任何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文檔時,它看起來好像沒有可靠的方式,就像在任何相關的文檔中所述,它所描述的類和方法只適用於硬件鍵盤!但一定有辦法。
我已經嘗試了一些方法,其中onKeyListener
,onKeyPreIme
等等,大多數根本不反應。例如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。