Android SearchView 控件
在Android开发中,SearchView是一个非常常见的控件,它提供了一个文本框和一个搜索按钮,方便用户进行搜索操作。本文将介绍SearchView控件的用法,并提供相应的代码示例。
SearchView的基本用法
导入SearchView控件
首先,在XML布局文件中添加SearchView控件:
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
然后,在Activity中获取SearchView实例,设置相应的监听器:
SearchView searchView = findViewById(R.id.search_view);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// 当用户点击搜索按钮时触发
doSearch(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// 当搜索框中的文本发生变化时触发
return false;
}
});
处理搜索事件
在onQueryTextSubmit
方法中,我们可以处理用户点击搜索按钮时的逻辑。比如,将搜索关键字传递给后台服务器进行搜索,或者直接在本地数据库中进行搜索。
private void doSearch(String keyword) {
// 处理搜索逻辑
}
自定义SearchView样式
SearchView控件还支持自定义样式。可以通过修改searchViewStyle
属性来改变SearchView的外观,如下所示:
<style name="AppSearchViewStyle" parent="Widget.AppCompat.SearchView">
<item name="searchIcon">@drawable/ic_search</item>
<item name="closeIcon">@drawable/ic_close</item>
<item name="queryBackground">@drawable/bg_search_text</item>
<item name="submitBackground">@drawable/bg_search_submit</item>
<item name="searchHintIcon">@drawable/ic_search_hint</item>
<item name="searchHintTextColor">#999999</item>
</style>
然后,在SearchView的布局文件中引用该样式:
<SearchView
...
style="@style/AppSearchViewStyle"/>
SearchView的高级用法
设置搜索提示
SearchView控件还支持设置搜索提示,帮助用户更快地找到想要的结果。可以通过setSuggestionsAdapter
方法来设置搜索提示的数据源。
SearchView searchView = findViewById(R.id.search_view);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
CursorAdapter suggestionAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
null,
new String[]{SearchManager.SUGGEST_COLUMN_TEXT_1},
new int[]{android.R.id.text1},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
searchView.setSuggestionsAdapter(suggestionAdapter);
然后,在onQueryTextChange
方法中,根据用户输入的关键字查询匹配的搜索提示,并更新数据源。
@Override
public boolean onQueryTextChange(String newText) {
Cursor cursor = getSuggestions(newText);
suggestionAdapter.changeCursor(cursor);
return true;
}
private Cursor getSuggestions(String keyword) {
// 根据关键字查询匹配的搜索提示
// 返回Cursor对象
}
设置搜索历史
SearchView控件还支持设置搜索历史,方便用户查看之前的搜索记录。可以通过setOnSuggestionListener
方法来监听搜索历史的点击事件。
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionSelect(int position) {
// 当用户点击搜索历史记录时触发
return true;
}
@Override
public boolean onSuggestionClick(int position) {
// 当用户点击搜索历史记录时触发
String suggestion = getSuggestion(position);
searchView.setQuery(suggestion, false);
doSearch(suggestion);
return true;
}
});
在onSuggestionClick
方法中,我们可以将点击的搜索历史记录作为关键字,进行搜索操作。
高级搜索功能
SearchView控件还支持高级搜索功能,比如范围搜索、条件搜索等。可以通过自定义搜索界面来实现这些功能。
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 打开自定义搜索界面
openAdvancedSearch();
}
});