Как поймать нажатие клавиши «Готово» на виртуальной клавиатуре

как мне поймать определенные ключевые события с виртуальной клавиатуры? в частности, меня интересует клавиша «Готово».


Примечание: Этот ответ старый и больше не работает. См. Ответы ниже.

Вы ловите событие KeyEvent, а затем проверяете его код клавиши. FLAG_EDITOR_ACTION используется для идентификации ключей ввода, которые поступают от IME, для ключа ввода которого была автоматически установлена ​​метка «следующий» или «готово»

  if (event.getKeyCode () =  = KeyEvent.FLAG_EDITOR_ACTION)//здесь ваш код  

Найдите здесь документы.


Я не совсем уверен, какой тип слушателя использовался в принятом ответе. Я использовал OnKeyListener прикреплен к EditText , и он не смог ни поймать, ни сделать.

Однако с использованием OnEditorActionListener работал, а также позволил мне различать их, сравнивая значение действия с определенными константами EditorInfo.IME_ACTION_NEXT и EditorInfo.IME_ACTION_DONE

editText.setOnEditorActionListener(new OnEditorActionListener () {@Override public boolean onEditorAction (TextView v, int actionId, событие KeyEvent) {if ((actionId & EditorInfo.IME_MASK_ACTION)! =  ) {doSomething (); return true;} else {return false;}}});  


Я не совсем уверен, какой тип слушателя использовался в принятом ответе. Я использовал OnKeyListener прикреплен к EditText , и он не смог ни поймать, ни сделать.

Однако с использованием OnEditorActionListener работал, а также позволил мне различать их, сравнивая значение действия с определенными константами EditorInfo.IME_ACTION_NEXT и EditorInfo.IME_ACTION_DONE

editText.setOnEditorActionListener(new OnEditorActionListener () {@Override public boolean onEditorAction (TextView v, int actionId, событие KeyEvent) {if ((actionId & EditorInfo.IME_MASK_ACTION)! =  ) { сделай что-нибудь();  вернуть истину;  } else {вернуть ложь;  }}});  

@ Ответ Свато не был для меня полным (и не не компилируется!), поэтому я показываю, как провести сравнение с действиями DONE и NEXT.

  editText.setOnEditorActionListener (new OnEditorActionListener () {@Override public boolean onEditorAction  (Представление TextView, int actionId, событие KeyEvent) {int result = actionId & EditorInfo.IME_MASK_ACTION; переключатель (результат) {case EditorInfo.IME_ACTION_DONE://перерыв в работе; case EditorInfo.IME_ACTION_NEXT://следующий разрыв материала;}}}  );  

Также я хочу указать, что для JellyBean и более поздних версий OnEditorActionListener необходим для прослушивания ввода или следующего, и вы не можете использовать OnKeyListener. Из документации:

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

Ссылка: http://developer.android.com/reference/android/view/KeyEvent.html


@ Ответ Свато для меня не был полным (и не компилируется!), поэтому я показываю, как провести сравнение с Действия DONE и NEXT.

  editText.setOnEditorActionListener (new OnEditorActionListener () {@Override общедоступное логическое значение onEditorAction (представление TextView, int actionId, событие KeyEvent) {int result = actionId & EditorInfo  .IME_MASK_ACTION; переключатель (результат) {case EditorInfo.IME_ACTION_DONE://завершено, прерывание; case EditorInfo.IME_ACTION_NEXT://следующий разрыв материала;}}});  

Также я хочу отметить, что для JellyBean и более поздних версий OnEditorActionListener необходим для прослушивания «ввода» или «следующего», и вы не можете использовать OnKeyListener. Из документации:

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

Ссылка: http://developer.android.com/reference/android/view/KeyEvent.html


просто сделайте так:

  editText.  setOnEditorActionListener (new OnEditorActionListener () {@Overridepublic логическое значение onEditorAction (представление TextView, int actionId, событие KeyEvent) {if (actionId == EditorInfo.IME_ACTION_DONE) {//Do Something} return false;}});  


просто сделайте вот так:

  editText.setOnEditorActionListener (new OnEditorActionListener () {@Overridepublic boolean  onEditorAction (представление TextView, int actionId, событие KeyEvent) {if (actionId == EditorInfo.IME_ACTION_DONE) {//Что-то делать} return false;}});  

  etSearchFriends = (EditText) findViewById (R.id.etSearchConn);  etSearchFriends.setOnKeyListener (new OnKeyListener () {public boolean onKey (View v, int keyCode, KeyEvent event) {//Если событие является событием нажатия клавиши на кнопке «Enter» if ((event.getAction () ==  KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {Toast.makeText (ACTIVITY_NAME.this, etSearchFriends.getText (), Toast.LENGTH_SHORT). шоу();  вернуть истину;  } return false;  }});   


  etSearchFriends = (EditText) findViewById (R.id.etSearchConn);  etSearchFriends.setOnKeyListener (new OnKeyListener () {public boolean onKey (View v, int keyCode, KeyEvent event) {//Если событие является событием нажатия клавиши на кнопке «Enter» if ((event.getAction () ==  KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {Toast.makeText (ACTIVITY_NAME.this, etSearchFriends.getText (), Toast.LENGTH_SHORT) .show (); return true;} return false;}});   

Чтобы поймать клавишу «Готово», нажмите на мягкой клавиатуре, переопределите метод onKeyUp Activity. Установка прослушивателя OnKeyListener для представления не будет работать, потому что нажатие клавиш в программных методах ввода обычно не запускает методы этого прослушивателя, этот обратный вызов вызывается при нажатии аппаратной клавиши в представлении.

 //Вызывается при отпускании клавиши и не обрабатывается ни одним из представлений внутри действия.  @Overridepublic логическое значение onKeyUp (int keyCode, событие KeyEvent) {switch (keyCode) {case KeyEvent.KEYCODE_ENTER://здесь код break;  по умолчанию: return super.onKeyUp (keyCode, event);  } return true;}  


Чтобы поймать клавишу «Готово», нажмите на мягкой клавиатуре, переопределите метод onKeyUp Activity. Установка OnKeyListener прослушиватель для представления не будет работать, потому что нажатия клавиш в программных методах ввода обычно не запускают методы этого прослушивателя, этот обратный вызов вызывается при нажатии аппаратной клавиши в представлении.

 //Вызывается, когда клавиша была отпущена, и не обрабатывается ни одним из представлений внутри действия.  @Overridepublic логическое значение onKeyUp (int keyCode, событие KeyEvent) {switch (keyCode) {case KeyEvent.KEYCODE_ENTER://здесь код break;  по умолчанию: return super.onKeyUp (keyCode, event);  } return true;}  

вы можете переопределить событие готовой клавиши этим методом:

  editText.setOnEditorActionListener (new TextView.OnEditorActionListener () {@Override общедоступное логическое значение onEditorAction (TextView v, int actionId, событие KeyEvent) {if (actionId == EditorInfo.IME_ACTION_DONE) { /делайте здесь свое дело} return false;}});  


вы можете переопределить событие ключа done этим методом:

  editText.setOnEditorActionListener (new TextView.OnEditorActionListener () {@Override общедоступное логическое значение onEditorAction (TextView v, int actionId, событие KeyEvent) {if (actionId == EditorInfo.IME_ACTION_DONE) { /делайте здесь свое дело} return false;}});  

У меня есть EditText, выполняет поиск по именам и автоматически показывает результаты ниже в ListView. Клавиатура SoftInput показывала только кнопку «Далее» и знак ввода — что не делало ничего. Мне нужна была только кнопка «Готово» (без знака «Далее» или «Ввод»), а также я хотел, чтобы она была нажата, она должна закрывать клавиатуру, потому что пользователь должен видеть результаты под ней.

Решение, которое я нашел/г-ном Сирил Моттье в своем блоге/был очень простым и работал без какого-либо дополнительного кода: в xml, где находится EditText, должно быть написано: android: imeOptions = «actionDone»

, чтобы скрыть клавиатуру с помощью Done кнопка EditText должна выглядеть так:

    


У меня есть EditText, который ищет имена, и он автоматически Каковы результаты ниже в ListView. Клавиатура SoftInput показывала только кнопку «Далее» и знак ввода, что ничего не делало. Мне нужна была только кнопка «Готово» (без знака «Далее» или «Ввод»), а также я хотел, чтобы она была нажата, она должна закрывать клавиатуру, потому что пользователь должен видеть результаты под ней.

Решение, которое я нашел/от Mr Сирил Моттье в своем блоге/был очень простым и работал без какого-либо дополнительного кода: в xml, где находится EditText, должно быть написано: android: imeOptions = «actionDone»

, чтобы скрыть клавиатуру с помощью Done кнопка EditText должна выглядеть так:

    

Примечание: укажите тип ввода в вашем edittext.

   edittext.setOnEditorActionListener (new OnEditorActionListener () {@Override общедоступное логическое значение onEditorAction (TextView v, int actionId, событие KeyEvent) {ifIn ((action_Id & Editor)  ) == EditorInfo.IME_ACTION_DONE) {//здесь что-нибудь делаем.  вернуть истину;  } return false;  }});  


Примечание: упоминание типа ввода в тексте редактирования.

   edittext  .setOnEditorActionListener (new OnEditorActionListener () {@Override общедоступное логическое значение onEditorAction (TextView v, int actionId, событие KeyEvent) {if ((actionId & EditorInfo.IME_MASK_ACTION) == EditorInfo.IME_ACTION_DONE return) {;//сделайте что-нибудь здесь.  return false;}});  

IME_MASK_ACTION — 255, а полученный actionId — 6 , а мой компилятор не принимает

  if (actionId & EditorInfo.IME_MASK_ACTION)  

, который является int. Какая вообще польза от & -ing 255? Таким образом, тест может быть просто

  общедоступным логическим значением onEditorAction (представление TextView, int actionId, событие KeyEvent) {if (actionId == EditorInfo.IME_ACTION_DONE) ...   


IME_MASK_ACTION — 255, а полученный actionId — 6, а мой компилятор не принимает

  if (actionId & EditorInfo.IME_MASK_ACTION)  

, который является int. Какая вообще польза от & -ing 255? Таким образом, тест может быть просто

  общедоступным логическим значением onEditorAction (представление TextView, int actionId, событие KeyEvent) {if (actionId == EditorInfo.IME_ACTION_DONE) ...   

Оцените статью
techsly.ru
Добавить комментарий