2012-11-26 31 views
18

enter image description hereAndroid - ActionBar Sherlock - Suchfilter

Ich versuche, Action-Bar mit ActionBar Sherlock zu implementieren. Ich habe drei Aktionsknöpfe, von denen einer ein Suchknopf ist. Nach Klick auf den Suchknopf sollte das Suchfeld angezeigt werden, das ich bereits implementiert habe. Aber ich möchte, dass es die volle Breite der Aktionsleiste einnimmt. Irgendeine Idee, wie ich dasselbe erreichen kann.

+1

Haben Du hast es versucht ng bei den ActionBarSherlock-Samples? https://github.com/JakeWharton/ActionBarSherlock/tree/master/samples/demos/src/com/actionbarsherlock/sample/demos –

+0

@ Alex Fu: Ya verwende ich API-Demos als Verweis auf Code. aber es hilft mir nicht, diese besondere Anforderung zu erfüllen. –

+0

Haben Sie versucht, SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW für Menüelemente zu verwenden? – jumper0k

Antwort

23

zuerst eine editTextLayout

layout_search.xml machen

<?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 Ihrem Menü xml android:actionLayout und android:showAsAction="always|collapseActionView" für Suchoption hinzufügen. Für andere Option 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> 

in Ihrer Aktivität oder ein Fragment machen außer Kraft setzen onCreateOptionsMenu wie diese 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 
      } 
     }); 
    } 

und fügen 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

Können Sie erklären, was der * mFollowingAdapter * in Ihrem Beispiel ist? – cringe

+0

@cringe sein der Adaptername (mAdapter: ein ListView Adapter), ich habe es geändert – JafarKhQ

+0

Dank, Ihr Beispiel hat mir schon sehr geholfen. :) – cringe