Подтвердить что ты не робот

Разработка Android: как использовать onKeyUp?

Я новичок в разработке Android, и я не могу найти подходящего руководства по использованию прослушивателя onKeyUp.

В моем приложении у меня есть большой EditText, когда кто-то нажимает и отпускает ключ в EditText, я хочу вызвать функцию, которая будет выполнять регулярные выражения в EditText.

Я не знаю, как использовать onKeyUp. Может кто-нибудь, пожалуйста, покажи мне, как?

4b9b3361

Ответ 1

Самый правильный способ - использовать класс TextWatcher.

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);

Ответ 2

КОРРЕКЦИЯ:

Некоторое время я использовал общий onKeyListener. Вскоре я обнаружил, что мой код вызывается дважды. Однажды с клавишей вниз и один раз с клавишей вверх. Теперь я использую следующий прослушиватель и один раз вызываю код. "if (event.getAction() == KeyEvent.ACTION_UP)" - это ключ.

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;
    }
};

Я обнаружил, что onKeyUp() вызывается автоматически для каждого элемента управления в Activity. Если это то, что вы хотите, добавьте его в Activity так же, как вы добавили onCreate()

Пример:

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

Я знаю, что это старый вопрос, но, возможно, это поможет другим с той же проблемой.

Ответ 3

Вы можете использовать следующий код:

 @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);
    } }

Здесь В конце мы назвали метод super.onkeyUp. Которая обрабатывает событие, когда пользователь не нажимает действительный ключ.

Подробнее см. .

Ответ 4

Только для EditText. его достигают самими setOnClickListener(). Нет необходимости в onKeyUp(). Потому что это произойдет с помощью события Click/Touch. правильно? Просто сделайте это.

edittext_object.setOnClickListener(new OnClickListener() {
     public void onClick(View v) {
    //do what you need 
    }
}

Ответ 5

Написание этого из моей головы, но оно должно быть среди следующих строк:

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);
    }
});

Ответ 6

Если вы используете устройство без касания, но с жесткими кнопками на клавиатуре (клавиатура), используйте этот код для управления событиями перемещения влево-вправо вверх-вниз и ОК. используйте onkeyDown, а не onKeyUp, потому что onKeyup возвратит следующие события кнопки:

        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;
        }