web-dev-qa-db-fra.com

Comment faire pour que SearchView soit toujours étendu dans Android?

J'ai SearchView en haut de la mise en page (pas dans la barre d'actions), est-il possible de forcer ce View à être toujours développé (ouvert)?

Sinon, je souhaite placer une image fantaisie près d'elle, est-il possible de faire SearchView masquer cette image lorsqu'elle est développée (cliquée/développée)?

36
ruruma

Vous pouvez utiliser la propriété Android:iconifiedByDefault="false" Sur XML ou définir par programmation setIconifiedByDefault(false). Selon la documentation, cette propriété définit le SearchView développé comme vous le souhaitez.

Jetez un oeil à SearchView.setIconifiedByDefault(boolean iconified)

82
Wakim
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchItem.expandActionView();

et dans le fichier de menu, utilisez

 showAsAction="ifRoom|collapseActionView"

Si vous avez des questions, n'hésitez pas à commenter.

15
Pankaj Arora

Vous pouvez essayer d'utiliser

searchView.onActionViewExpanded();

et si vous n'avez pas besoin d'ouvrir le clavier

searchView.clearFocus();
4
yoAlex5

Je le fais en fragments, je l'ai fait en utilisant

searchItem.expandActionView();

mais lorsque l'utilisateur appuie sur le bouton de retour, il s'effondre donc dans la méthode d'effondrement que j'ai utilisé

getActivity().getSupportFragmentManager().popBackStack();
// when it collapsed i am going back

Voici ma solution en détail:

search_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item Android:id="@+id/search_contacts"
        Android:title="search"
        Android:icon="@drawable/search2"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="Android.support.v7.widget.SearchView" >
    </item>
</menu>

dans le fragment i utilisé sous le code:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.search_menu, menu);

        // Define the listener
        MenuItemCompat.OnActionExpandListener expandListener = new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item)
            {
                getActivity().getSupportFragmentManager().popBackStack();
                // Do something when action item collapses
                return true;  // Return true to collapse action view
            }

            @Override
            public boolean onMenuItemActionExpand(MenuItem item)
            {

                // Do something when expanded
                return true;  // Return true to expand action view
            }
        };



        MenuItem searchItem = menu.findItem(R.id.search_contacts);


        // Assign the listener to that action item
        MenuItemCompat.setOnActionExpandListener(searchItem, expandListener);

        // Any other things you have to do when creating the options menu…



        SearchView searchView =
                (SearchView) MenuItemCompat.getActionView(searchItem);
        //searchView.setIconifiedByDefault(false);
        searchItem.expandActionView(); // when fragment opens it expanded auto


        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText)
            {
                seachViewFunction(newText); // in searchViewFunction(newText); i am doing my things
                return false;
            }
        });

        super.onCreateOptionsMenu(menu, inflater);
    }
3
dharmx