五、使用Search Dialog
search dialog提供了一个上浮在屏幕上方的搜索条,应用程序的图标显示在搜索条的左边。当用户在输入的时候,它可以提供建议的搜索关键字。
当用户自行搜索的时候,系统会把它的搜索关键字searchable activity来执行真正的搜索。
但是如果你的设备使用的是Android 3.0,(或更高版本),你可以考虑使用search widget。
search dialog默认是隐藏的,直到用户激活它。如果用法的手机上有SEARCH按钮,那么按下该键,默认是激活search dialog。
为了使用search dialog,你必须想系统说明哪个searchable activity将受到该search dialog的搜索请求,以便执行搜索。比如,在示例2中,是名叫SearchableActivity的searchable activity,当然同时使用search dialog的也是它。如果你想使用其他的actvitity来显示search dialog的, 比如名字为OtherActivity, 让它来显示search dialog 并把搜索请求传递给SearchableActivity, 你必须在manifest中声明一个searchable activity
(比如SearchableActivity)来接收OtherActivity中的search dialog的搜索请求.
为一个activity的search dialog声明searchable activity,你需要在AndroidManifest.xml中代表该activity的<activity>
元素中加入<meta-data>。
这个<meta-data>必须包含“
android:value”属性,该属性指明了
searchable activity的类名,
还必须包括属性“android:name”
,且其值必须为 "android.app.default_searchable"
.
下面的例子就声明了两个
searchable activity(
SearchableActivity和
OtherActivity),
OtherActivity
也是在它的
search dialog中
使用SearchableActivity
执行searches操作。
示例4:
<application ... >
<!-- this is the searchable activity; it performs searches -->
<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>
<!-- this activity enables the search dialog to initiate searches
in the SearchableActivity -->
<activity android:name=".OtherActivity" ... >
<!-- enable the search dialog to send searches to SearchableActivity -->
<meta-data android:name="android.app.default_searchable"
android:value=".SearchableActivity" />
</activity>
...
</application>
因为在OtherActivity
中已经包含了一个 <meta-data>元素,它声明了使用哪个searchable activity来执行搜索,所以它的search dialog也变得可用。
按下手机的
SEARCH按钮(如果有的话)或调用onSearchRequested()都将激活search dialog.
一旦用户在search dialog中执行search操作, 系统将启动SearchableActivity
并向其传送ACTION_SEARCH
intent.
提示:searchable activity 自己默认就提供了the search dialog ,且它的searchable activity就是自己本身,所以不需要再声明.
如果你想为你的应用程序的每个activity 都提供该search dialog, 那么请 <meta-data>
元素加入 <application>
作为其儿子, 而不是加入到每个<activity>
. 通过这种方式, 每个activity 都继承了该值, 提供search dialog, 并把searches传送到同一个searchable activity. (如果你有多个searchable activities, 你可以在单个activitiy中加入不同的<meta-data>来声明
searchable activity,这样就重写了默认的searchable activity )
六、如何启动search dialog
正如上面所提到的,如果当前activity声明了使用searchable activity,那么按下手机的
SEARCH按钮(如果有的话)或调用onSearchRequested()都将激活search dialog.
然而,SEARCH按钮并不是所有的设备上都有,所以你需要在你的UI中提供一个搜索按钮,
以便通过调用onSearchRequested()激活search dialog 。
例如,你可以在Options Menu的一个菜单项或在你的activity的布局的按钮中调用onSearchRequested()来启动
search dialog.
search_icons.zip 文件中有针对medium and high density屏幕的搜索图标,你可以在你的搜索菜单项或按钮中使用它(low-density screens scale-down the hdpi image by one half).
你也可以使用"type-to-search"功能, 这样当用户在键盘进行输入的时候,将激活search dialog,并且是直接输入到search dialog.
你可以在activity的onCreate()
中调用setDefaultKeyMode
(DEFAULT_KEYS_SEARCH_LOCAL
)来开启该功能