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

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

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

Спасибо за помощь заранее.

4b9b3361

Ответ 1

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

Вот пример из моего собственного кода. У меня есть EditText с именем addCourseText, который вызовет функцию 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;
    }
});

Ответ 2

<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

Ответ 3

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

android:imeOptions="actionSearch"

Ответ 4

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

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

и imeOptions также имеют некоторые другие значения, такие как "go", "next", "done" и т.д.

Ответ 5

Чтобы избежать перехода к следующему редактируемому полю (если он у вас есть), вы можете проигнорировать события блокировки клавиатуры, но обрабатывать события с клавиатурой. Я также предпочитаю сначала фильтровать ключевой код, предполагая, что он будет немного более эффективным. Кстати, помните, что возвращение 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;
        }
    }

});

Ответ 6

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

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

Ответ 7

Мы также можем использовать Kotlin лямбда

editText.setOnKeyListener { _, keyCode, keyEvent ->
        if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            Log.d("Android view component", "Enter button was pressed")
            [email protected] true
        }
        [email protected] false
    }