Как поймать мягкую клавиатуру "ввод / готово" нажатие?

Я хотел бы знать, когда пользователь нажимает клавишу «Enter / done / Next» на виртуальной клавиатуре, не зная, в каком поле редактирования текста находится пользователь. Я видел некоторый код, но он всегда использует имя поля редактирования текста это редактируется.

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


person Ted Betz    schedule 16.03.2011    source источник


Ответы (1)


Затем прикрепите OnEditorActionListener ко всем из них.

person CommonsWare    schedule 16.03.2011
comment
Я видел это только в определении нового метода, например этого: textEdit5.setOnEditorActionListener (new OnEditorActionListener () {public boolean onEditorAction (TextView arg0, int keycode, событие KeyEvent) {if (arg1 == KeyEvent.FLAG_EDITOR_ACTION ) {btnSave.requestFocus (); return true;} return false;}); Нужно ли мне создавать новый метод для каждого из 14 имеющихся у меня окон редактирования текста? - person Ted Betz; 17.03.2011
comment
@Ted Betz: Нет. Вы вызываете setOnEditorActionListener() в 14 виджетах EditText. Вот пример приложения, в котором я использую OnEditorActionListener для настраиваемого View на панели действий Honeycomb: github.com/commonsguy/cw-android/tree/master/Menus/ActionBarBC - person CommonsWare; 17.03.2011
comment
@Ted Betz: Вы создаете один объект OnEditorActionListener и используете его 14 раз. Код, который вы поместили в отредактированный комментарий выше, создаст одноразовый объект OnEditorActionListener. Это просто синтаксис Java и не имеет ничего общего с Android. - person CommonsWare; 17.03.2011
comment
Я попробовал myEditText1.setOnEditorActionListener (); инициировать каждого из 14 слушателей, но безуспешно. Я ценю ссылку на ваш пример кода, но он тоже использует OnEditorAction в одноразовом методе. Не могли бы вы привести пример того, как я могу инициировать 14 слушателей, не дублируя код // Do Stuff в каждом слушателе? - person Ted Betz; 17.03.2011
comment
@Ted Betz: Я ценю ссылку на ваш пример кода, но он тоже использует OnEditorAction в одноразовом методе - нет, это не так. onSearch не метод. Это объект, а именно член данных операции. - person CommonsWare; 17.03.2011
comment
Понимаю ... выглядит очень эффектно, конечно, элегантнее, чем 14 слушателей. В вашем образце отсутствует событие KeyEvent) {, думаю, оно каким-то образом было обрезано. Тем не менее, когда я пробую, он не улавливает никаких событий. Есть идеи, почему бы и нет? - person Ted Betz; 17.03.2011
comment
@ Тед Бец: думаю, это как-то обрезано - на самом деле, прокручивается вправо. Для публикации книги я использую табуляцию с двумя пробелами; В веб-интерфейсе GitHub используются вкладки с восемью пробелами. Не очень. Тем не менее, когда я пробую, он не улавливает никаких событий. Есть идеи, почему бы и нет? - этот конкретный образец покажет только EditText на устройстве / эмуляторе Honeycomb. Я использовал эту технику в других местах (не с открытым исходным кодом). Убедитесь, что у вас есть атрибуты android:imeActionId и android:imeOptions="actionDone" для EditText в вашем файле макета. - person CommonsWare; 17.03.2011