注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Searchable(三)  

2011-05-11 18:29:41|  分类: 开发专题 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
五、使用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)来开启该功能

  评论这张
 
阅读(1055)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017