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)?
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)
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.
Vous pouvez essayer d'utiliser
searchView.onActionViewExpanded();
et si vous n'avez pas besoin d'ouvrir le clavier
searchView.clearFocus();
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);
}