How to detect character key presses?
Asked Answered
B

3

5

I know how to listen for when the ENTER button is pressed in a TextView, as shown in the code below:

textView.setOnKeyListener(new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
            if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                enterPressed();
                return true;
            }
            return false;
        }
});

However... how do I listen for when a character key (A-Z, 0-9, special characters, etc.), basically everything else other than ENTER, BACKSPACE, or SPACE, are pressed? I want to do this because I want a button to become enabled when the user has started typing text into a TextView. Strangely, the onKey() method isn't even called when these character keys are pressed, so is there another way I'm suppose to listen for them? Thanks in advance!

Book answered 29/6, 2011 at 4:47 Comment(0)
D
6

Text watcher might help you

textView.addTextChangedListener(new TextWatcher(){

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub

    }

});
Dentalium answered 29/6, 2011 at 5:5 Comment(0)
M
1

"Key presses in software keyboards will generally NOT trigger this method, although some may elect to do so in some situations. Do not assume a software input method has to be key-based; even if it is, it may use key presses in a different way than you expect, so there is no way to reliably catch soft input key presses."

http://developer.android.com/reference/android/view/View.OnKeyListener.html

Manolo answered 6/6, 2013 at 23:25 Comment(0)
E
0

you will have to write a function something like isCharacter(int), Pass the keyCode of the KeyEvent to this function check what is the range of the int - is in the character range which you want for the alphabets and numbers, if so returnTrue in you keypressed function hanlde the case of true or false returned from isCharacter...

Elviraelvis answered 29/6, 2011 at 4:51 Comment(2)
Well the main problem is that the method onKey() isn't even called for regular character keys. I tested this by making it write to the log every time a key event was caught. It seems like the onKey() method only gets called for function presses like ENTER or BACKSPACE.Book
Not sure if you have solved this issue... Anyways would like to add this #1968240Elviraelvis

© 2022 - 2024 — McMap. All rights reserved.