android focus searchview

android - ¿Cómo eliminar el foco de SearchView?



focus (9)

Quiero eliminar el foco y el texto de onResume() en onResume() .

Intenté searchView.clearFocus() pero no está funcionando.

Este es mi código xml:

<SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/toolbar" android:layout_alignTop="@+id/toolbar" android:layout_centerVertical="true" android:layout_marginBottom="4dp" android:layout_marginTop="4dp" android:iconifiedByDefault="false" android:paddingLeft="16dp" android:paddingRight="16dp" />


Quiero eliminar el foco y el texto de onResume() en onResume()

Para lograr esto, puede establecer su diseño de raíz enfocable con el atributo android:focusableInTouchMode y solicitar el enfoque en esa View en onResume() .

Por ejemplo:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:focusableInTouchMode="true"> <SearchView android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:iconifiedByDefault="false"/> </LinearLayout>

Y luego en tu Activity :

private View rootView; private SearchView searchView; // ... @Override protected void onCreate(Bundle savedInstanceState) { // ... rootView = findViewById(R.id.root_layout); searchView = (SearchView) findViewById(R.id.search_view); } @Override protected void onResume() { super.onResume(); searchView.setQuery("", false); rootView.requestFocus(); }


Acabo de solicitar el enfoque a algún otro grupo de vista y eliminó el enfoque de la vista de búsqueda.


Escriba este código en onResume()

searchView.setText(""); this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


La solución más simple (y creo que la única que funciona al 100%) es crear un LinearLayout invisible. Este LinearLayout capturará el foco del EditText .


Para aquellos que buscan deshacerse del enfoque cuando se inicia la Activity Y el SearchView está en el Menu , hice estas 3 cosas, podría funcionar con solo algunas:

1.- Crear una clase padre de SearchView . Llamémoslo RafaSearchView :

class RafaSearchView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : SearchView(context, attrs, defStyleAttr) { init { setIconifiedByDefault(false) } }

2.- Obtenga el xml donde tiene su Toolbar y configure touchable="false" y focusableInTouchMode="true" :

<androidx.appcompat.widget.Toolbar android:id="@+id/searchToolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/white" android:focusable="false" android:focusableInTouchMode="true" android:theme="@style/ToolBarStyle" app:popupTheme="@style/AppTheme.PopupOverlay" />

3.- En onCreateOptionsMenu(Menu) cuando estoy declarando mi RafaSearchView , llame:

searchView?.isIconified = false searchView?.clearFocus()


Puede ocultar manualmente el teclado en la función onResume () como:

InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE); View view = context.getCurrentFocus(); if (view == null) { view = new View(context); } if (view != null) { IBinder iBinder = view.getWindowToken(); imm.hideSoftInputFromWindow(iBinder, 0); }


Use esta línea de código en su método onResume

if (searchView != null) { searchView.setQuery("", false); searchView.clearFocus(); searchView.onActionViewCollapsed(); }


cuando framelayout en la actividad, vaya al diseño principal, y en el fragment también haga lo mismo en framelayout . Solo agrega este atributo:

android:focusableInTouchMode="true"


solo uso android:focusable="false"

<SearchView android:layout_width="match_parent" android:id="@+id/search" android:paddingLeft="8dp" android:paddingRight="8dp" android:focusable="false" android:iconifiedByDefault="false" android:layout_height="wrap_content"> </SearchView>