2012-11-26 15 views
18

enter image description hereAndroid - ActionBar Sherlock - Filtro di ricerca

Sto cercando di attuare l'azione Bar utilizzando ActionBar Sherlock. Ho tre pulsanti di azione uno dei quali è un pulsante di ricerca. Facendo clic sul pulsante Cerca, dovrebbe essere visualizzato il campo di inserimento Cerca che ho già implementato. Ma voglio che occupi tutta la larghezza della barra delle azioni. Qualche idea su come posso ottenere lo stesso.

+1

Avere hai provato looki ng agli esempi di ActionBarSherlock? https://github.com/JakeWharton/ActionBarSherlock/tree/master/samples/demos/src/com/actionbarsherlock/sample/demos –

+0

@ Alex Fu: Ya sto usando le dimostrazioni API come riferimento al codice. ma mi aiuta a realizzare quel particolare requisito. –

+0

Hai provato a utilizzare SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW per le voci di menu? – jumper0k

risposta

23

previamente ad un editTextLayout

layout_search.xml

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/search_edit_text" 
    android:cursorVisible="true" 
    android:hint="@string/search_friend_hint" 
    android:imeOptions="actionDone" 
    android:inputType="text" 
    android:textColor="@android:color/black" 
    android:textCursorDrawable="@android:color/black" /> 

In te Menu XML aggiungere android:actionLayout e android:showAsAction="always|collapseActionView" per la ricerca l'opzione. l'altra opzione di rendere android:showAsAction="ifRoom"

menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:icon="@drawable/ic_action_sort" 
     android:orderInCategory="1" 
     android:showAsAction="ifRoom" 
     android:title="@string/menu_sort"/> 
    <item 
     android:id="@+id/menu_search" 
     android:actionLayout="@layout/layout_search" 
     android:icon="@drawable/search" 
     android:orderInCategory="0" 
     android:showAsAction="always|collapseActionView" 
     android:title="@string/search"/> 

</menu> 

nella vostra attività o frammento di ignorare onCreateOptionsMenu come questo fragment.java

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

     final EditText editText = (EditText) menu.findItem(
       R.id.menu_search).getActionView(); 
     editText.addTextChangedListener(textWatcher); 

     MenuItem menuItem = menu.findItem(R.id.menu_search); 
     menuItem.setOnActionExpandListener(new OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 
       // Do something when collapsed 
       return true; // Return true to collapse action view 
      } 

      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       editText.clearFocus(); 
       return true; // Return true to expand action view 
      } 
     }); 
    } 

e aggiungere textWatcherListener

private TextWatcher textWatcher = new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 

      if (null != mAdapter) { 
       mAdapter.getFilter().filter(s); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }; 
+0

Puoi spiegare cosa è * mFollowingAdapter * nel tuo esempio? – cringe

+0

@cringe il suo nome dell'adattatore (mAdapter: un adattatore ListView), lo ho cambiato – JafarKhQ

+0

grazie, il tuo esempio mi ha già aiutato molto. :) – cringe

Problemi correlati