目前,Android有两种搜索实现,一种是搜索控件(SearchView),一种是搜索对话框。两种实现都需要做一些准备工作:添加搜索配置文件(searchable configuration),创建searchable activity。搜索配置文件包括语音搜索、搜索建议、提示等功能的配置,searchable activity接收搜索查询、搜索数据、显示搜索结果。
搜索控件(SearchView)的实现
可在选项菜单资源中如下设置(实现了Action Bar中添加搜索框,也可用将SearchView用在其它布局中):
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/menu_search"
android:icon="@drawable/ic_menu_search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
就会实现SearchView形式的搜索了。
如果想添加其它搜索选项,比如搜索提示字符串、搜索建议提示等等,可以在Activity的onCreateOptionsMenu(Menu menu)方法中添加如下代码:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
}
搜索对话框的实现
在布局中添加一个按钮用于搜索,当然也可以用上边选项菜单中的配置。在按钮或菜单的触发方法中,调用onSearchRequested()方法。
如在上边选项菜单中,见以下代码:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.search:
onSearchRequested();
return true;
default:
return false;
}
}
}
两种搜索实现以后的工作
以上搜索接口实现以后,就可以实现搜索功能,当在搜索框中键入搜索关键字后,有两种选择:
一种是点击给出的搜索建议(1处),一种是按回车执行搜索查询(2处)。这两种代码实现如下:
private void handleIntent(Intent intent) {
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
// 1 handles a click on a search suggestion; launches activity to show word
Intent wordIntent = new Intent(this, WordActivity.class);
wordIntent.setData(intent.getData());
startActivity(wordIntent);
} else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
// 2 handles a search query
String query = intent.getStringExtra(SearchManager.QUERY);
showResults(query);//此方法自己实现
}
}
以上代码见Android SDK样例Searchable Dictionary。