SearchView prende tutto lo spazio nel nuovo ActionBarCompat

Ho passato da ActionBarSherlock a ActionBarCompat (libreria di supporto v7). Dopo alcune regolazioni, quasi tutto sta funzionando bene finora.

Ma sono in difficoltà con SearchView nell'ActionBar. Quando è espansa (in realtà, è sempre espansa nella mia attività), occupa tutto lo spazio e non rispetta lo spazio di altri elementi di azione che sono impostati per mostrare sempre (showAsAction = "sempre").

  • Le parti del link profondo a Google+, ma il collegamento non fa nulla
  • Come ho intenzione di creare un file xml usando pullparser per hashmap
  • Come eseguire una riprova quando il download non riesce in AsyncTask utilizzando AlarmManager
  • La costruzione e l'esecuzione di app tramite Gradle e Android Studio è più lenta che via Eclipse
  • Come modificare il colore di background degli elementi selezionati in ListView?
  • Scorri per spostare tabs su Android, come le applicazioni YouTube / Google Music
  • Per simulare il problema, utilizzare questo:

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

    Nell'attività:

     @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); } 

    Questo è il risultato in android 4.3:

    immettere qui la descrizione dell'immagine

    E questo è il risultato in android 2.3 (le voci di azione non appaiono nemless):

    immettere qui la descrizione dell'immagine

    Lo stesso problema si verifica quando utilizzo:

     setSupportProgressBarIndeterminateVisibility(true); 

    L'indicatore di progresso appare molto strano in Android 4.3 e non viene visualizzato in Android 2.3.

    Lo stesso codice ha funzionato come previsto con ActionBarSherlock. Quando ci fu un certo elemento di azione, SearchView ha usato per diminuire la sua width per dare spazio agli elementi di azione.

    AGGIORNARE:

    Ho pubblicato un problema nel Bug Tracker di Android: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

    Se hai lo stesso problema, segui il problema.

    AGGIORNARE:

    Ho cercato di mettere le voci di azione prima di SearchView e in questo modo vengono visualizzati gli elementi.

    immettere qui la descrizione dell'immagine

    Tuttavia, il setSupportProgressBarIndeterminateVisibility (true) non mostra ancora la barra di avanzamento.

    3 Solutions collect form web for “SearchView prende tutto lo spazio nel nuovo ActionBarCompat”

    Questo è sicuramente un bug relativo a Android ma una soluzione può includere SearchView in modo programmato come questo:

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

    È inoltre ansible utilizzare un layout XML per definire le properties; SearchView. Tuttavia "iconifiedByDefault" in XML tende ad essere inefficace nella mia esperienza. (Questo può anche il mio male)

    Grazie per aver creato un problema. Ecco l'URL del relativo rapporto di errore: https://code.google.com/p/android/issues/detail?id=58251

    Nonostante ciò che è stato menzionato nella relazione bug, la mia esperienza è stata la stessa con ActionBarSherlock e ActionBarCompat. Quindi mi aspetto che gli utenti ActionBarSherlock siano anche interessati.

    Hai provato a utilizzare collapseActionView() ?

    Lo uso come questo:

     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(); } 

    Non so se funziona con V7, ma certamente funziona con v4.

    Prova a cambiare 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> 

    Rimuovere la linea

     searchView.setIconifiedByDefault(false); 

    Oppure si può call esplicitamente il metodo con true come argomento.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.