Android Development: How To Use onKeyUp?
Asked Answered
C

7

20

I'm new to Android development and I can't seem to find a good guide on how to use an onKeyUp listener.

In my app, I have a big EditText, when someone presses and releases a key in that EditText I want to call a function that will perform regular expressions in that EditText.

I don't know how I'd use the onKeyUp. Could someone please show me how?

Coadjutor answered 18/9, 2010 at 9:47 Comment(0)
Y
35

The very right way is to use TextWatcher class.

EditText tv_filter = (EditText) findViewById(R.id.filter);

TextWatcher fieldValidatorTextWatcher = new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (filterLongEnough()) {
                populateList();
            }
        }

        private boolean filterLongEnough() {
            return tv_filter.getText().toString().trim().length() > 2;
        }
    };
    tv_filter.addTextChangedListener(fieldValidatorTextWatcher);
Yard answered 26/8, 2011 at 20:12 Comment(1)
Thanks, I'd already came across the TextWatcher class ages ago. Must've forgot to mark a correct answer, sorry for wasting your time!Coadjutor
B
13

CORRECTION:

For a while, I used a generic onKeyListener. I soon found that my code was being called twice. Once with the key down and once with key up. I now use the following listener and only call the code once. "if (event.getAction() == KeyEvent.ACTION_UP)" is the key.

OnKeyListener keyListener = new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            //do something here
        }
        return false;
    }
};

I found that onKeyUp() is called automatically for every control in the Activity. If this is what you want, add it to the Activity just like you add the onCreate()

Example:

public boolean onKeyUp(int keyCode, KeyEvent event) {
    //do something here
    return false;
};

I know this is a old question, but maybe this will help others with the same issue.

Bot answered 18/2, 2011 at 17:5 Comment(0)
Q
2

You may consider using the following code:

 @Override 
 public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    } }

Here In the end we have called the super.onkeyUp method. Which handles the event when the user do not presses the valid key.

For more details you may consider following link.

Quittance answered 16/7, 2016 at 15:24 Comment(0)
S
0

Just for an EditText. its achieve by setOnClickListener() itself. No Need for the onKeyUp(). Because that will perform by a click/Touch Event. right? Just do this.

edittext_object.setOnClickListener(new OnClickListener() {
     public void onClick(View v) {
    //do what you need 
    }
}
Stuck answered 18/9, 2010 at 9:59 Comment(1)
he probably wanted to do something during onkeyup,Kava
C
0

Writing this out of my head but it should be among the following lines:

text.setKeyListener(new KeyListener() {
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {


        if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent


        return super.onKeyUp(keyCode, event);
    }
});
Chronoscope answered 18/9, 2010 at 10:1 Comment(0)
K
0

If you use device with no touch but with hard keypad buttons (keyboard) use this code to control the events of moving left right up down and ok. use onkeyDown and not onKeyUp because the onKeyup will return the next button events:

        Button myButton = (Button) findViewById(R.id.my_btn);
        myButton .setKeyListener(new KeyListener() {
        @Override
        public int getInputType() {
            return 0;
        }

        @Override
        public boolean onKeyDown(View view, Editable editable, int keyCode, KeyEvent keyEvent) {
            Log.d("myTag", "onKeyDown code: " +keyCode);
            switch (keyCode) {
                case KeyEvent.KEYCODE_DPAD_RIGHT:
                    // USER_MOVE_RIGHT();
                    return true;
                case KeyEvent.KEYCODE_DPAD_LEFT:
                    //USER_MOVE_LEFT());
                    return true;
                case KeyEvent.KEYCODE_DPAD_DOWN:
                    //USER_MOVE_DOWN());
                    return true;
                case KeyEvent.KEYCODE_DPAD_UP:
                    //USER_MOVE_UP();
                    return true;
                case KeyEvent.KEYCODE_DPAD_CENTER:
                    //USER_Press_OK()
                    return true;
                               }
            return false;
        }
Kirwin answered 13/7, 2019 at 10:16 Comment(0)
B
0
    ‏       public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        ‏               case KeyEvent.KEYCODE_BACK:
        ‏                   actionLabel.setText("KEYCODE_BACK key pressed");
        ‏                   Toast.makeText(this, "Press again back for exit", Toast.LENGTH_SHORT).show();
        ‏                   counter++;
        ‏                   if (counter > 1) {
        ‏                       super.onBackPressed();
        ‏                   }
        ‏                   return true;
        ‏               case KeyEvent.KEYCODE_VOLUME_UP:
        ‏                   actionLabel.setText("VOLUME_UP key pressed");
        ‏                   return true;
        ‏               case KeyEvent.KEYCODE_VOLUME_DOWN:
        ‏                   actionLabel.setText("VOLUME_DOWN key pressed");
        ‏                   return true;
        ‏           }
        return super.onKeyDown(keyCode, event);
        ‏       }
    // catches the onKeyUp button event
    ‏       @Override
    ‏       public boolean onKeyUp(int keyCode, KeyEvent event) {
    ‏           switch (keyCode) {
    ‏               case KeyEvent.KEYCODE_BACK:
    ‏                   actionLabel.setText("KEYCODE_BACK key released");
    ‏                   return true;
    ‏               case KeyEvent.KEYCODE_VOLUME_UP:
    ‏                   actionLabel.setText("VOLUME_UP key released");
    ‏                   return true;
    ‏               case KeyEvent.KEYCODE_VOLUME_DOWN:
    ‏                   actionLabel.setText("VOLUME_DOWN key released");
    ‏                   return true;
    ‏           }
    ‏           return super.onKeyDown(keyCode, event);
    ‏       }
    // works for API level 5 and lower
    ‏       @Override
    ‏       public void onBackPressed() {
    ‏           actionLabel.setText("BACK key pressed");
    ‏           super.onBackPressed();
    ‏       }
    // catches the long press button event (longer than 2 seconds)
    ‏       @Override
    ‏       public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    ‏           Toast.makeText(this, "Pressed for a long time", Toast.LENGTH_SHORT).show();
    ‏           return true;
    ‏       }
    // catches the on touch event on screen and shows the specific pixels
    ‏       // touched
    ‏       @Override
    ‏       public boolean onTouchEvent(MotionEvent event) {
    ‏           float x = event.getX();
    ‏           float y = event.getY();
    ‏           actionLabel.setText("Touch press on x: " + x + " y: " + y);
    ‏           return true;
    ‏       }}
Brucebrucellosis answered 1/3, 2021 at 21:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.