SearchView是搜索框组件,它可以让用户在文本框内输入汉字,并允许通过监听器监控用户输入,当用户用户输入完成后提交搜索按钮时,也通过监听器执行实际的搜索。
<android.support.v7.widget.SearchView
android:id="@+id/searchview"
android:layout_width="match_parent"
android:layout_height="30dp"
android:inputType="text"
android:background="@drawable/bg_empty_white"
app:queryHint="输入停车场名称"
app:searchHintIcon="@null"
app:searchIcon="@null" />
- queryHint:提示语
- searchHintIcon:提示图标
- searchIcon:搜索图标
当然还提供了很多方法,但是基本很少用到。还有设置字体样式:
(v7和v4还是有区别的,v4的方法用在v7上会报空指针错误。)
//初始是否已经是展开的状态
//写上此句后searchView初始展开的,也就是是可以点击输入的状态,如果不写,那么就需要点击下放大镜,才能展开出现输入框
searchsview.onActionViewExpanded();
SearchView.SearchAutoComplete theTextArea = (SearchView.SearchAutoComplete) searchview.findViewById(android.support.v7.appcompat.R.id.search_src_text);
//设置字体大小
theTextArea.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
//设置字体颜色
theTextArea.setTextColor(getResources().getColor(R.color.white));
//设置提示字体的颜色
theTextArea.setHintTextColor(getResources().getColor(R.color.black));
设置监听器:建议搜索结果还是异步处理
private Handler mHandler = new Handler();
private SearchTask searchTask = new SearchTask();
searchview.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mHandler.removeCallbacks(searchTask);
searchTask.query = query;
mHandler.postDelayed(searchTask,500);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
mHandler.removeCallbacks(searchTask);
if (newText.equals("")){
}else {
searchTask.query = newText;
mHandler.postDelayed(searchTask,500);
}
return true;
}
});
//搜索结果处理
private void getResult(String newText) {
}
private class SearchTask implements Runnable {
public String query;
@Override
public void run() {
//此处可以设置搜索历史的隐藏和展示搜索结果,如果都放在同一个recyclerview里面就不需要了。
getResult(query);
}
}