2012-11-26 20 views
18

enter image description hereAndroid - Actionbar Sherlock - Filtr wyszukiwania

Próbuję wdrożyć pasek czynności za pomocą ActionBar Sherlock. Mam trzy przyciski akcji, z których jednym jest przycisk wyszukiwania. Po kliknięciu przycisku Szukaj powinno zostać wyświetlone pole wyszukiwania, które już zaimplementowałem. Ale chcę, żeby zajmował całą szerokość paska akcji. Każdy pomysł, jak mogę osiągnąć to samo.

+1

Have próbowałeś looki ng w próbkach ActionBarSherlock? https://github.com/JakeWharton/ActionBarSherlock/tree/master/samples/demos/src/com/actionbarsherlock/sample/demos –

+0

@ Alex Fu: Używam demonstracji API jako odnośnika do kodu. ale to pomoże mi w osiągnięciu tego konkretnego wymogu. –

+0

Czy próbowałeś użyć SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW dla pozycji menu? – jumper0k

Odpowiedz

23

najpierw dokonać 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" /> 

w was menu xml dodać android:actionLayout i android:showAsAction="always|collapseActionView" dla opcji wyszukiwania. Dla innych opcji uczynić 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> 

w swojej działalności lub fragmentu nadpisać onCreateOptionsMenu jak ten 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 
      } 
     }); 
    } 

i dodać 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

Czy możesz wyjaśnić, co * MFollowingAdapter * w twoim przykładzie jest? – cringe

+0

@kręć jego nazwę adaptera (mAdapter: adapter ListView), zmieniam go – JafarKhQ

+0

dzięki, twój przykład już mi bardzo pomógł. :) – cringe

Powiązane problemy