SearchView prend tout l'espace dans le nouveau ActionBarCompat

Je suis passé de ActionBarSherlock à ActionBarCompat (support bibliothèque v7). Après quelques ajustements, presque tout fonctionne bien d'ici.

Mais j'ai des problèmes avec SearchView dans ActionBar. Quand il est étendu (en fait, il est toujours développé dans mon Activité), il prend tout l'espace et ne respecte pas l'espace d'autres éléments d'action qui doivent être affichés toujours (showAsAction = "always").

  • Pourquoi ActionbarSharelock ne montre que l'icône de débordement, même s'il y a de la place
  • Comment faire un ActionBar comme Google Play qui s'efface lorsque vous faites défiler
  • Remplacer l'arrière plan déroulant ActionBarCompat overflow pop-up?
  • ActionBar et ActionBar.Tab et tiroir de navigation Android
  • Le bouton ActionBar 'up' détruit l'activité parent, le "retour" ne fonctionne pas
  • Gardez la barre d'action affichée lors de la modification de PreferenceScreen
  • Pour simuler le problème, utilisez ceci:

    <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_buscar" app:actionViewClass="android.support.v7.widget.SearchView" android:icon="@drawable/abc_ic_search" app:showAsAction="always" android:title="@string/buscar"/> <item android:id="@+id/tentar_novamente" android:title="@string/tentar_novamente" android:icon="@drawable/acao_tentar_novamente" app:showAsAction="always" /> </menu> 

    Dans l'activité:

     @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.busca_action_menu, menu); searchMenuItem = menu.findItem(R.id.menu_buscar); searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); searchView.setIconifiedByDefault(false); searchView.setQueryHint(stringBusqueArtistasMusicasEAlbuns); return super.onCreateOptionsMenu(menu); } 

    Ceci est le résultat de l'Android 4.3:

    Entrez la description de l'image ici

    Et c'est le résultat de l'Android 2.3 (les éléments d'action n'apparaissent même pas):

    Entrez la description de l'image ici

    Le même problème se produit lorsque j'utilise:

     setSupportProgressBarIndeterminateVisibility(true); 

    L'indicateur de progression apparaît très étrange dans Android 4.3 et n'apparaît pas dans Android 2.3.

    Le même code fonctionnait comme prévu avec ActionBarSherlock. Lorsqu'il y avait un élément d'action, le SearchView a utilisé pour diminuer sa largeur pour donner de l'espace pour les éléments d'action.

    METTRE À JOUR:

    J'ai posté un problème dans le Bug Tracker d'Android: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

    Si vous avez le même problème, suivez le problème.

    METTRE À JOUR:

    J'ai essayé de mettre les éléments d'action avant le SearchView et de la manière dont ils apparaissent.

    Entrez la description de l'image ici

    Mais, le setSupportProgressBarIndeterminateVisibility (true) ne montre toujours pas la barre de progression.

    3 Solutions collect form web for “SearchView prend tout l'espace dans le nouveau ActionBarCompat”

    C'est certainement un bug sur Android, mais une solution de contournement peut inclure SearchView comme ceci:

     @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SearchView searchView = new SearchView(getSupportActionBar().getThemedContext()); searchView.setIconifiedByDefault(false); getActionBar().setCustomView(searchView); getActionBar().setDisplayShowCustomEnabled(true); } 

    Vous pouvez également utiliser un XML de mise en page pour définir les propriétés de SearchView. Cependant, «iconifiedByDefault» dans XML tend à être inefficace dans mon expérience. (Cela peut être mauvais si)

    Merci d'avoir créé un problème à ce sujet. Voici l'URL du rapport de bogue concerné: https://code.google.com/p/android/issues/detail?id=58251

    En dépit de ce qui est mentionné dans le rapport de bogue, mon expérience était identique avec ActionBarSherlock et ActionBarCompat. Je m'attends donc à ce que les utilisateurs ActionBarSherlock soient également affectés.

    Avez-vous essayé d'utiliser collapseActionView() ?

    Je l'utilise comme ceci:

     public static MenuItem msearchMenuItem; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); msearchMenuItem = menu.findItem(R.id.search); return true; } public static MenuItem getSearchMenuItem() { return msearchMenuItem; } public void doSomething(){ //Collapse the SearchBar getSearchMenuItem().collapseActionView(); } 

    Je ne sais pas si cela fonctionne avec v7, mais ça marche certainement avec v4.

    Essayez de changer Android: showAsAction = "collapseActionView | ifRoom"

     <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="android.widget.SearchView" /> </menu> 

    Supprimer la ligne

     searchView.setIconifiedByDefault(false); 

    Ou vous pouvez appeler explicitement la méthode avec l'argument true comme argument.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.