2016-08-15 3 views
1

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

public class MyKeyListener implements View.OnKeyListener{ 
    // ... 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if (event.getAction() == KeyEvent.ACTION_UP) { 
      if (keyCode == KeyEvent.KEYCODE_DEL) { 
       // do some processing 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_0) { 
       // do another processing 
       return true; 
      } 
     } 
    } 
} 

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

+0

Правильный слушатель использовать для мягких клавиатур OnKeyboardActionListener https://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html – Ian

ответ

0

Не гарантируется, вы не можете.

Вы можете использовать TextWatcher и прикрепить его ко всем редактируемым текстам.

Или вы создаете свой собственный KeyboardView и заставляете пользователя использовать его, тогда вы можете подключить к нему ожидающих слушателей. https://developer.android.com/guide/topics/text/creating-input-method.html?hl=ja#IMEUI

+0

Проблемы TextWatcher в том, что я не могу обнаружить забой с ним. – averageman

+0

backspace как в виде delete? технически вы можете сравнить текущую и предыдущую длину строки. в любом случае, использование textwatcher будет сложным делом, некоторые специальные случаи, которые вам нужно будет установить, используя как textwatcher, так и ваш onKeyListener. – TWL

Смежные вопросы