2012-11-26 38 views
18

enter image description hereAndroid - Actionbar Sherlock - Bộ lọc tìm kiếm

Tôi đang cố gắng triển khai Thanh tác vụ bằng ActionBar Sherlock. Tôi có ba Nút Hành động, một trong số đó là Nút Tìm kiếm. Khi nhấp vào nút Tìm kiếm, trường nhập Tìm kiếm sẽ được hiển thị mà tôi đã triển khai. Nhưng tôi muốn nó có chiều rộng đầy đủ của Action Bar. Bất kỳ ý tưởng làm thế nào tôi có thể đạt được như vậy.

+1

Có bạn đã thử looki ng tại các mẫu ActionBarSherlock? https://github.com/JakeWharton/ActionBarSherlock/tree/master/samples/demos/src/com/actionbarsherlock/sample/demos –

+0

@ Alex Fu: Tôi đang sử dụng trình diễn API làm tham chiếu đến mã. nhưng nó giúp tôi đạt được yêu cầu cụ thể đó. –

+0

Bạn có cố gắng sử dụng SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW cho các mục menu không? – jumper0k

Trả lời

23

đầu tiên tạo ra một 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" /> 

Trong bạn đơn xml thêm android:actionLayoutandroid:showAsAction="always|collapseActionView" cho tùy chọn tìm kiếm. Đối với tùy chọn khác làm 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> 

trong hoạt động hoặc đoạn bạn ghi đè onCreateOptionsMenu như fragment.java này

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

và thêm 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

Bạn có thể giải thích * mFollowingAdapter * trong ví dụ của bạn là gì không? – cringe

+0

@cringe tên bộ điều hợp (mAdapter: bộ điều hợp ListView), tôi đã thay đổi nó – JafarKhQ

+0

cảm ơn, ví dụ của bạn đã giúp tôi rất nhiều. :) – cringe

Các vấn đề liên quan