Android – Actionbar Шерлок – Фильтр поиска

Введите описание изображения здесь

Я пытаюсь реализовать Action Bar с помощью ActionBar Sherlock. У меня есть три кнопки действий, одна из которых – кнопка поиска. При нажатии кнопки «Поиск» должно отображаться поле ввода поиска, которое я уже выполнил. Но я хочу, чтобы он использовал всю ширину панели действий. Любая идея, как я могу достичь того же.

Сначала сделайте 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" /> 

В меню xml добавьте android:actionLayout и android:showAsAction="always|collapseActionView" для параметра android:showAsAction="always|collapseActionView" Поиск». Для других вариантов make 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> 

В вашей деятельности или фрагменте переопределить onCreateOptionsMenu, как этот фрагмент.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 } }); } 

И добавьте 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 } };