先看结果:
相关的官方文档在这里:Creating a Search Interface
Android官方提供了两种方式:
- 弹出一个Dialog,覆盖当前的Activity界面
-
在AppBar中扩展一个搜索框。
这个是上面动态图片展示的方式。以下介绍的是这种方式的实现。
官方建议:如果你写的程序是给Android 3.0 以上的设备使用,那么推荐使用AppBar的方式。
想要完成这个功能,你需要创建以下几个文件:
-
一个XML文件,用于配置搜索框。该文件路径:res/xml/searchable.xml
该文件会被系统用来创建SearchableInfo对象
-
一个用于接收搜索关键词并展示最终结果的Activity
-
一个内容提供器,用于提供搜索建议
分为两部分写。先完成搜索功能,再添加提供搜索建议的功能。
第一部分:基本的搜索功能
这个部分完成五个文件的创建或修改:
- MainActivity.java
配置AppBar - SearchableActivity.java
根据Intent的Action,显示intent的内容
- res/xml/searchable.xml
配置搜索框
- res/menu/options_menu.xml
添加搜索框及配置AppBar
- AndroidManifest.xml
配置SearchableActivity,使其接收ACTION_SEARCH的Intent
该版本的完整代码:SearchWidgetInAppBar - 完成基本的功能
searchable.xml
初始的xml:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint"
>
</searchable>
之后添加“搜索建议”功能的时候,还需要对它进行修改。
展示结果的Activity
当用户执行一个搜索的时候,系统会启动该Activity,并且传入搜索的词汇。这个词汇包含在Intent中,并且标记为ACTION_SEARCH动作。
现在创建一个简单地包含TextView的Activity就行了。这里将其命名为 SearchableActivity。
打开AndroidManifest.xml对该Activity进行配置:
<application ... >
<activity android:name=".SearchableActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
...
</application>
由于intent-filter的设置,当接收到标记为ACTION_SEARCH的动作时,会启动该Activity。
SearchableActivity.java
public class SearchableActivity extends AppCompatActivity {
TextView mTvWord = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchable);
mTvWord = (TextView) findViewById(R.id.tv_word);
Intent intent = getIntent();