安卓API指南——创建搜索功能

如果想要在应用里加入搜索功能,安卓可以帮助你实现顶部Activity窗口的搜索对话框,或是可以放置在布局里的搜索控件。搜索对话框和控件都可以把用户的查询关键词指向你应用中专门的Activity。如此一来用户便可以依靠搜索对话框和组件,在任意的Activity中发起搜索,系统也会开启相应的Activity完成搜索并列出结果。

搜索对话框和控件的其他特色还有:

语音搜索

根据近期的查询结果提供搜索建议

匹配你应用中实际结果的搜索建议

 

基础

 

搜索对话框和控件有相同的功能,但有些许的不同

搜索对话框是安卓系统控制的UI组件。用户激活它时,搜索对话框会出现在Activity的顶部,如图1.


安卓系统会监控该对话框内的所有事件。当用户提交搜索时,系统会将该关键词提供给你专门设置用来处理搜索的Activity。对话框同样会在用户输入时提供搜索建议

搜索控件则是SearchView对象,可以放置在布局中的任意位置。默认情况下它会类似一个EditText组件,不会有任何行为,但你可以对它进行相应的设置,这样安卓系统就会处理所有的输入事件,将搜索关键词提供给相应的Activity,并提供搜索建议(就如同搜索对话框一样)。不过搜索控件只支持API 11以上的版本。

注意:如果你希望的话,可以自己来处理搜索控件上的全部用户输入,通过各种回调方法和Listener。

用户从搜索对话框或控件执行搜索时,系统会创建一个Intent并保存进去用户的搜索关键词。系统就会开启你声明用来处理搜索的Activity并传入Intent。要给你的应用设置好这种搜索,你需要完成如下步骤:

1.   可搜索的设置

XML文件中设置搜索对话框或组件。包括语音搜索、搜索建议和搜索窗体里的提示文字等。

2.   可搜索的Activity

   接收搜索关键词的Activity可以搜索你的数据,并将搜索结果展示出来

3.   搜索接口

由搜索对话框提供,搜索对话框默认是隐藏的,但当执行onSearchRequest方法时就会出现在屏幕顶端(当用户点击Search按钮时)

或是由SearchView组件提供

使用该组件可以让你在Activity的任意位置摆放搜索框。不过你应该更多的把它放在ActionBar里作为一个ActionView来使用。

 

创建可搜索配置

首先建立可搜索配置XML文件。配置搜索对话框的UI或是控件的UI,并定义搜索建议和语音搜索等特色。该文件一般会叫做searchable.xml并必须放置在res/xml文件夹下。

注意:系统会利用该文件创建一个SeachableInfo对象,但你绝不能在运行时自己创建该对象——一定要在XML文件中声明配置。

 

可搜索配置文件必须包括<searchable>根字节,并定义一或两个属性。如:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint" >
</searchable>

android:label属性是唯一必须的属性。它引用的字符串应该就是应用的名字。除非你开启Quick Search Box搜索建议,不然该标签一般都是不可见的。这时点标签是在系统设置里的可搜索项中可见。

虽然并非必须,我们还是推荐你一直写hint。

<searchable>节点还有其他几个属性。不过除非你需要使用语音搜索和搜索建议,不然你都用不上。(具体参考Searchable Configuration)

 

创建Searchable Activity

 

该Activity会根据搜索关键字字符串来执行搜索,并会提供搜索结果。

当用户执行搜索时,系统会开启该Activity并通过ACTION_SEARCH 这一action来将关键词封入Intent。搜索Activity会通过intent的QUERY来拿到关键字,然后搜索数据并提供结果。

系统必须了解哪个Activity是执行搜索的。所以一定要在Manifest文件里声明。

1.   声明Activity接受ACTION_SEARCH intent。在intent-filter中注明

2.   在<meta-data>中设置搜索配置。

如:

<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>

<meta-data>中一定要包含android:name="android.app.searchable

这一行,还要有android:resource="@xml/searchable"

注意:intentfilter里其实并不需要category那一行

 

执行搜索

声明完毕后,在搜索Activity中执行搜索需要三步

1.  拿到搜索关键字

2.   搜索数据

3.   提供结果

 

一般来说搜索结果是ListView的形式,所以可能要让searchable Activity继承ListActivity。该Activity包括了一个拥有单一ListView的默认布局,还会提供不少和ListView相关的便捷方法。

 

获取关键词

用户执行搜索后,系统会开启搜索Activity并塞给他一个ACTION_SEARCH的int

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值