Используйте клавишу «ENTER» на программной клавиатуре вместо кнопки

Привет, у меня есть EditText Button EditText и search. Когда я набираю искомый текст, я бы хотел использовать клавишу ENTER на программной клавиатуре вместо Button поиска, чтобы активировать функцию поиска.

Благодарим за помощь заранее.

Solutions Collecting From Web of "Используйте клавишу «ENTER» на программной клавиатуре вместо кнопки"

Вы делаете это, установив OnKeyListener в свой EditText .

Вот пример из моего собственного кода. У меня есть EditText именем addCourseText , который вызывает функцию addCourseFromTextBox когда addCourseFromTextBox клавиша ввода или d-pad.

 addCourseText = (EditText) findViewById(R.id.clEtAddCourse); addCourseText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: addCourseFromTextBox(); return true; default: break; } } return false; } }); 

Возможно, вы могли бы добавить атрибут в свой EditText следующим образом:

 android:imeOptions="actionSearch" 
 <EditText android:id="@+id/search" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/search_hint" android:inputType="text" android:imeOptions="actionSend" /> 

Затем вы можете прослушивать нажатия кнопки действия, определяя TextView.OnEditorActionListener для элемента EditText. В своем слушателе ответьте на соответствующий идентификатор действия IME, определенный в классе EditorInfo, например IME_ACTION_SEND. Например:

 EditText editText = (EditText) findViewById(R.id.search); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_SEND) { sendMessage(); handled = true; } return handled; } }); 

Источник: https://developer.android.com/training/keyboard-input/style.html

Добавьте атрибут в EditText как android: imeOptions = "actionSearch"

Это лучший способ выполнить функцию

И imeOptions также имеют некоторые другие значения, такие как «идти», «следующий», «делать» и т. Д.

Это образец одного из моих приложений, как я обрабатываю

  //searching for the Edit Text in the view final EditText myEditText =(EditText)view.findViewById(R.id.myEditText); myEditText.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) { //do something //true because you handle the event return true; } return false; } }); 

Чтобы избежать фокусировки на следующем редактируемом поле (если оно у вас есть), вы можете проигнорировать события блокировки клавиатуры, но обрабатывать события с ключами. Я также предпочитаю сначала фильтровать код keyCode, предполагая, что он будет немного более эффективным. Кстати, помните, что возвращение true означает, что вы обработали событие, так что никакой другой слушатель не будет. Во всяком случае, вот моя версия.

 ETFind.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) { if (event.getAction() == KeyEvent.ACTION_DOWN) { // do nothing yet } else if (event.getAction() == KeyEvent.ACTION_UP) { findForward(); } // is there any other option here?... // Regardless of what we did above, // we do not want to propagate the Enter key up // since it was our task to handle it. return true; } else { // it is not an Enter key - let others handle the event return false; } } });