Android – Actionbar Sherlock – searchfilter

在这里输入图像说明

我正在尝试使用ActionBar Sherlock来实现Action Bar。 我有三个动作button其中之一是一个searchbutton。 在点击searchbutton时,应该显示我已经实现的searchinput字段。 但我希望它采取行动栏的全部宽度。 任何想法如何我可以实现相同的。

Related of "Android – Actionbar Sherlock – searchfilter"

首先做一个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" /> 

在你的菜单中添加android:actionLayoutandroid:showAsAction="always|collapseActionView"来search选项。 对于其他选项使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像这样的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 } }); } 

并添加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 } };