Searchable(三)

五、使用Search Dialog
search dialog提供了一个上浮在屏幕上方的搜索条,应用程序的图标显示在搜索条的左边。当用户在输入的时候,它可以提供建议的搜索关键字。
当用户自行搜索的时候,系统会把它的搜索关键字searchable activity来执行真正的搜索。
但是如果你的设备使用的是Android 3.0,(或更高版本),你可以考虑使用search widget。
<wbr style="line-height:25px"></wbr>
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)来开启该功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值