onKeyListener not working on virtual keyboard

前端 未结 6 955
南方客
南方客 2020-12-01 16:00

I don\'t understand why this piece of code is not working. Only backspace and return key are detected. Listener doesn\'t fire for any other key. My device is Nexus One.

6条回答
  •  Happy的楠姐
    2020-12-01 16:50

    Ok. I finally figured how to do what I want, and I am not proud on Android for this.

    I am writing server/client application where on client I have to open SoftKeyboard and send pressed keys (characters and DEL key)... Each time key is pressed, that character is sent to server. If DEL is pressed I am sending sequence {BS} to server.

    In order to do that I had to implement TextWatcher and onTextChange which works well except for situation when EditText is empty and user press DEL key. Since there is no change in EditText there is no way to detect that DEL key is pressed.

    In addition to TextWatcher, I had to implement onKeyListener which I attached to my EditText control. This onKeyListener ignores all keys on SoftKeyboard except DEL and RETURN. Not sure why? A bug maybe?

    Here is my code:

        TextView txtInput = (TextView)findViewById(R.id.txtInput);
        txtInput.addTextChangedListener(inputTextWatcher);
    
        txtInput.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.d(TAG, keyCode + " character(code) to send");
                return false;
            }
        });
    

    and TextWatcher....

    private TextWatcher inputTextWatcher = new TextWatcher() {
        public void afterTextChanged(Editable s) { }
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
            { }
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.d(TAG, s.charAt(count-1) + " character to send");;          
        }
    };
    

提交回复
热议问题