web-dev-qa-db-fra.com

Comment supprimer le focus de SearchView?

Je souhaite supprimer le focus et le texte de SearchView dans onResume()

J'ai essayé searchView.clearFocus() mais cela ne fonctionne pas.

Ceci est mon code 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" />
19
Pradeep Deshmukh

Je souhaite supprimer le focus et le texte de SearchView dans onResume()

Pour ce faire, vous pouvez définir votre mise en page racine comme suitable avec l'attribut Android:focusableInTouchMode et demander le focus sur cette View dans onResume().

Par exemple:

<?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>

Et puis dans votre 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();
}
35
earthw0rmjim

en cours d’activité, accédez à la disposition parente, et à fragment, faites également la même chose dans framelayout. Ajoutez simplement cet attribut:

Android:focusableInTouchMode="true"
13

Utilisez cette ligne de code dans votre méthode onResume

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

Écrivez ce code dans onResume()

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

La solution la plus simple (et je pense que la seule solution qui fonctionne à 100%) est de créer un nom invisible LinearLayout. Ce LinearLayout va capter l’attention du EditText.

0
Zeeshan Yousaf

Pour ceux qui cherchent à se débarrasser de l’attention lorsque la Activity est lancéeETla SearchView est dans la Menu, j’ai fait ces 3 choses, cela pourrait marcher avec seulement quelques-unes:

1.- Créez une classe parent de SearchView. Appelons cela RafaSearchView:

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

    init {
        setIconifiedByDefault(false)
    }
}

2.- Obtenez le code XML où vous avez votre Toolbar, et définissez touchable="false" et 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.- Sur onCreateOptionsMenu(Menu) lorsque je déclare ma RafaSearchView, appelez:

    searchView?.isIconified = false
    searchView?.clearFocus()
0
Rafael Ruiz Muñoz

Je venais de demander le focus à un autre groupe de vues et cela supprimait le focus de searchview.

0
Raghav Sharma

Vous pouvez masquer manuellement le clavier dans la fonction onResume () en tant que:

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);
         }
0
taranjeetsapra