web-dev-qa-db-fra.com

Android - Rendre la barre de recherche complète cliquable

J'utilise un élément de recherche-vue dans mon fragment pour implémenter la fonctionnalité de recherche.

<SearchView
    Android:id="@+id/search_bar"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginTop="7dp"
    Android:layout_marginLeft="7dp"
    Android:layout_marginRight="7dp"
    Android:layout_marginBottom="7dp"
    Android:background="@color/white" />

enter image description here

Le problème est que seule l'icône de recherche est cliquable. Une autre zone de la barre de recherche n'est pas cliquable. Lorsque je clique uniquement sur l'icône, je peux effectuer une recherche. 

enter image description here

Pouvez-vous s'il vous plaît m'aider à rendre la zone de recherche entière cliquable.

enter image description here

22
Saran

Quelle est la moyenne cliquable? déclencher une action de recherche ou simplement mettre la zone d'édition en évidence? Si c'est le premier, vous pouvez simplement rendre l'icône clickable = false. et rendre la mise en page complète cliquable et implémenter un écouteur d'événement.

<SearchView
Android:id="@+id/search_bar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clickable="true"
Android:click="onClick"
Android:layout_marginTop="7dp"
Android:layout_marginLeft="7dp"
Android:layout_marginRight="7dp"
Android:layout_marginBottom="7dp"
Android:background="@color/white" />

La méthode onClick devrait être

public void onClick(View v) {
   InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
    im.showSoftInput(editText, 0);
}
5
Sethbrin

Cela peut être fait simplement en définissant Iconified sur false sur OnClick de SearchView.

searchBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchBar.setIconified(false);
    }
});

Référence: La réponse d'Eric Lui

J'espère que ça va aider.

43
Zeeshan Ghazanfar
search_bar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        search_bar.onActionViewExpanded();
    }
});
11
Lokesh Gupta

Le truc n'est pas tant de rendre la zone entière cliquable que de l'étendre puis de cacher le clavier. 

Premièrement, votre mise en page dans le XML convient, laissez-la telle quelle, dans votre Java, vous souhaitez obtenir les éléments suivants:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    //Define your Searchview
    SearchView searchView = (SearchView) findViewById(R.id.search_bar);

    //Turn iconified to false:
    searchView.setIconified(false);
    //The above line will expand it to fit the area as well as throw up the keyboard

    //To remove the keyboard, but make sure you keep the expanded version:
    searchView.clearFocus();
}

Cela permet d’agrandir le clavier sur toute la longueur de la zone, de se concentrer sur ce qui permet de cliquer sur toute la zone, puis de supprimer le clavier afin que l’utilisateur ait l’impression de cliquer champ et faire apparaître un clavier. 

Devrait accomplir ce que vous recherchez.

-Sil

10
Silmarilos

ajoutez ceci à votre code __mlAndroid:iconifiedByDefault="false" il conservera ouvrez votre searchview. 

et pour l'effacer, ajoutez clearfocus à votre objet searchview.

4
pratz9999
searchView.setIconified(false);
1
Uthaya

Utilisez ceci

searchView.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            searchView.onActionViewExpanded();
            OR
            searchView.setIconified(false);
        }
    });

    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            if(!b)
            {
                if(searchView.getQuery().toString().length() < 1)
                {
                    searchView.setIconified(true); //close the search editor and make search icon again
                    OR
                    searchView.onActionViewCollapsed();
                }

                searchView.clearFocus();

            }
        }
    });
0
Ali Bagheri

Écrivez les lignes de code données ci-dessous dans votre fichier Java:

SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setQueryHint("Enter your address");
searchView.setIconified(false);
searchView.clearFocus();

Après cela, n'oubliez pas d'écrire Android:focusable="true" dans votre fichier XML à l'intérieur de la balise SearchView.

Par exemple:

<SearchView 
Android:id="@+id/searchView" 
Android:layout_width="match_parent" 
Android:layout_height="wrap_content" 
Android:focusable="true" />
0
Pratik Adhikari