在actionbar中搜索是很常见的功能,而在actionbar中实现搜索也比较简单,只需要在配置文件中加入android:actionViewClass="android.widget.SearchView"
这里引入了一个action View的概念,ActionView是一种可以在ActionBar中替换Action按钮的控件,它可以允许用户在不切换界面的情况下通过ActionBar完成一些较为丰富的操作。我们就可以用SearchView来实现搜索功能。如:
<item
android:id="@+id/search"
android:icon="@drawable/ic_action_search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/search"/>
这里需要注意一下android:showAsAction="ifRoom|collapseActionView",collapseActionView代表该控件可以合并成一个action按钮。
当定义好SearchView后我们就可以在代码里使用SearchView了
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main,menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchViewsearch = (SearchView) <span style="font-family: Arial, Helvetica, sans-serif;">searchItem </span>.getActionView();
return super.onCreateOptionsMenu(menu);
}
在onCreateOptionsMenu方法中我们可以获取到SearchView的引用,我们可以调用setOnQueryTextListener方法来获取Searchview的值,该方法需要传入一个参数,参数类型为android.widget.SearchView.OnQueryTextListener,这个接口里边有两个方法boolean onQueryTextSubmit(String query); boolean onQueryTextChange(String newText);其中第一个方法是用户在SearchView中输入完成点击提交后回调的,第二个方法是主要SearchView的内容发生变化时回调的,所以大家可以根据自身业务的需求来实现。
search.setOnQueryTextListener(newOnQueryTextListener() {
@Override
publicboolean onQueryTextSubmit(String query) {
//TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),"onQueryTextSubmit", Toast.LENGTH_SHORT).show();
returnfalse;
}
@Override
publicboolean onQueryTextChange(String newText) {
//TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),"onQueryTextChange", Toast.LENGTH_SHORT).show();
returnfalse;
}
});
大家是否还记得collapseActionbar,这个属性可以把action view合并成一个action按钮,当SearchView展开或者合并的时候可能会加载不同的界面,可以注册一个监听器:
searchItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onMenuItemActionCollapse", Toast.LENGTH_SHORT).show();
return true;
}
});
在SearchView展开的时候会调用onMenuItemActionExpand方法,在合并的时候会调用onMenuItemActionCollapse方法,所以大家可以根据自身的业务需求来具体实现。
对于SearchView就先简单的介绍到这里