Android: ¿cómo hacer que el botón Intro del teclado diga "Buscar" y maneje su clic?

Resuelto Ricket asked hace 54 años • 6 respuestas

No puedo entender esto. Algunas aplicaciones tienen un EditText (cuadro de texto) con la ayuda del cual, cuando lo tocas y aparece el teclado en pantalla, el teclado tiene un botón "Buscar" en lugar de una tecla Intro.

Quiero implementar esto. ¿Cómo puedo implementar ese botón Buscar y detectar la pulsación del botón Buscar?

Editar : encontré cómo implementar el botón Buscar; en XML android:imeOptions="actionSearch"o en Java EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);. Pero, ¿cómo manejo al usuario que presiona ese botón Buscar? ¿Tiene algo que ver android:imeActionId?

Ricket avatar Jan 01 '70 08:01 Ricket
Aceptado

En el diseño, configure las opciones del método de entrada para buscar.

<EditText
    android:imeOptions="actionSearch" 
    android:inputType="text" />

En Java, agregue el detector de acciones del editor.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

En kotlin use a continuación:

 editText.setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
          performSearch()
        }
        true
      }
Robby Pond avatar Jul 08 '2010 15:07 Robby Pond

Ocultar el teclado cuando el usuario hace clic en buscar. Además de la respuesta de Robby Pond

private void performSearch() {
    editText.clearFocus();
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    //...perform search
}
kaMChy avatar Mar 16 '2017 08:03 kaMChy

En xmlel archivo, ponga imeOptions="actionSearch"y inputType="text", maxLines="1":

<EditText
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search"
    android:imeOptions="actionSearch"
    android:inputType="text"
    android:maxLines="1" />
Braj Bhushan Singh avatar Nov 29 '2016 13:11 Braj Bhushan Singh

En Kotlin

evLoginPassword.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        doTheLoginWork()
    }
    true
}

Código XML parcial

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
       <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginUserEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>
</LinearLayout>
Shaon avatar Aug 28 '2018 06:08 Shaon