Come fare la voce di menu di ricerca in una vista completa nella barra delle azioni usando l'abs

Ho cinque voci di menu di azione nella barra delle azioni, che utilizzo la libreria dello sherlock della barra degli strumenti come segue:

In onCreateOptionsMenu() , ho usato il seguente codice:

  • Come modificare il colore del bordo (non focalizzato) di un EditText?
  • Come cambiare i themes (modalità notturna) senza riavviare l'attività?
  • IBM Worklight 5.0.6.1 - Non ricevere notifiche push quando il telefono / app è chiuso
  • Come registrare il suono utilizzando l'auricolare Bluetooth
  • Cliccando su un elemento in modo programmato in RecyclerView
  • Dimensioni multiple dello schermo Android con la stessa densità
  •   menu.add(0,1,0 "Settings") .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.add(0,2,0 "Favorites") .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.add(0,3,0 "List") .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.add(0,4,0 "Upload") .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.add(0,5,0 "Search") .setActionView(R.layout.search_layout) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

    Ora il mio problema è Ricerca Modifica text (che è in colore rosso) appare così: Cerca il testo di modifica appare come questo

    Voglio fare una visione completa nel barra d'azione, come questo:

    Uscita prevista

    One Solution collect form web for “Come fare la voce di menu di ricerca in una vista completa nella barra delle azioni usando l'abs”

    Questa domanda è un po 'vecchia ma cercherò di rispondere comunque. Spero che qualcuno lo troverà utile.

    Ecco quello che ho fatto:

    Crea una class personalizzata SearchView che estende SearchView . Definisce 2 events: uno sparato quando la vista di ricerca si espande e l'altra quando si crolla.

     public class EnglishVerbSearchView extends SearchView { OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener; OnSearchViewExpandedEventListener mOnSearchViewExpandedEventListener; public EnglishVerbSearchView(Context context) { super(context); } @Override public void onActionViewCollapsed() { if (mSearchViewCollapsedEventListener != null) mSearchViewCollapsedEventListener.onSearchViewCollapsed(); super.onActionViewCollapsed(); } @Override public void onActionViewExpanded() { if (mOnSearchViewExpandedEventListener != null) mOnSearchViewExpandedEventListener.onSearchViewExpanded(); super.onActionViewExpanded(); } public interface OnSearchViewCollapsedEventListener { public void onSearchViewCollapsed(); } public interface OnSearchViewExpandedEventListener { public void onSearchViewExpanded(); } public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) { mSearchViewCollapsedEventListener = eventListener; } public void setOnSearchViewExpandedEventListener(OnSearchViewExpandedEventListener eventListener) { mOnSearchViewExpandedEventListener = eventListener; } } 

    Nella mia attività , ho fatto quanto segue: – Creato un field privato per memorizzare il riferimento al menu. – Definisce gli events per il collasso e l'espansione della vista di ricerca in cui nascondo e mostro altre azioni utilizzando il riferimento al menu.

     public class DictionaryActivity extends ActionBarActivity { private Menu mMenu; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.dictionary, menu); MenuItem searchItem = menu.findItem(R.id.action_search); EnglishVerbSearchView searchView = (EnglishVerbSearchView) MenuItemCompat.getActionView(searchItem); searchView.setOnSearchViewCollapsedEventListener(listenerCollapse); searchView.setOnSearchViewExpandedEventListener(listenerExpand); mMenu = menu; return super.onCreateOptionsMenu(menu); } final private OnSearchViewCollapsedEventListener listenerCollapse = new OnSearchViewCollapsedEventListener() { @Override public void onSearchViewCollapsed() { // show other actions MenuItem favouriteItem = mMenu.findItem(R.id.action_favourite); MenuItem playItem = mMenu.findItem(R.id.action_play); favouriteItem.setVisible(true); playItem.setVisible(true); // I'm doing my actual search here } }; final private OnSearchViewExpandedEventListener listenerExpand = new OnSearchViewExpandedEventListener() { @Override public void onSearchViewExpanded() { // hide other actions MenuItem favouriteItem = mMenu.findItem(R.id.action_favourite); MenuItem playItem = mMenu.findItem(R.id.action_play); favouriteItem.setVisible(false); playItem.setVisible(false); } }; } 

    Nel file menu.xml, ho utilizzato la visualizzazione di ricerca personalizzata:

     <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/action_search" yourapp:showAsAction="always|collapseActionView" yourapp:actionViewClass="com.xxx.EnglishVerbSearchView" /> </menu> 

    Spero che sia tutto ciò che serve perché è solo un estratto dal mio codice completo dell'attività. Fammi sapere se manca qualcosa.


    Come per commento da arne.jans:

    Sembra sufficiente fare MenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); per fare spazio al SearchView . Il vantaggio sarebbe: gli altri menu-elementi entrano nel menu di overflow e sono ancora accessibili, anche con SearchView aperto.

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