为了在Android系统的协助下(把搜索查询传递到Activity中并提供搜索建议项)实现搜索,你的应用必须以一个XML文件的形式提供给系统一个搜索配置。
这一页将从搜索配置的语法以及使用上来描述它。更多如何为你的应用实现搜索功能的信息,请从关于Creating a Search Interface的开发指南开始阅读。
文件路径:
:res/xml/filename.xml
:Android使用文件名作为资源ID。
语法:
<?xml version"utf-8"?>
元素:
定义所有Android系统用于提供辅助搜索的搜索配置。
属性:
:android:label
:::字符串资源。(必须的。)你应用的名称。它应该跟你manifest文件中 或者 元素中android:includeInGlobalSearch为true的时候才对用户可见,在这种情况下,这个标签作为系统搜索设置中的一个可搜索项用来辨别你的应用。
::android:hint
字符串资源。(推荐的。)当搜索框文本区域没有文本输入时显示的文本。它提示用户什么内容是可搜索的。为了跟其他Android应用保持一致性,你应该用"搜索 <内容-或者-产品>"这种格式来格式化android:hint的字符串。比如,"搜��歌曲或者��术家"或者"搜索YouTube"。
::android:searchMode
:::关键字。设置额外的模式来控制搜索的表现。当前可用的模式定义了当自定义建议项获取到焦点时搜索文本该如何被改写。以下的模式值是可接受的:
{|style="border-spacing: 0px;margin: 0 4px 0 75px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | Value
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | Description
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
"queryRewriteFromText"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
使用 SUGGEST_COLUMN_TEXT_1这一列的值来改写搜索文本。
|- style="vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
"queryRewriteFromData"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
使用 SUGGEST_COLUMN_INTENT_DATA这一列的值来改写搜索文本。这应该仅用于当 SUGGEST_COLUMN_INTENT_DATA里面的值对用户的检查和编辑是合适的,通常HTTP URI的就是这样。
:::详见 Adding Custom Suggestions中改写搜索文本的相关讨论。
::android:searchButtonText
:::字符串资源。显示在搜索按钮上的文本。按钮默认的展示一个搜索图标(放大镜),这对国际化来说是理想的,所以你不应当使用这个属性来改变按钮的图标,除非按钮执行的行为是搜索以外的东西(比如Web浏览器中的一个URI请求)。
::android:inputType
:::关键字。定义了使用的输入法的类型(比如软键盘的类型)。对于大多数对期望输入的文本没有限制的搜索来说,你不需要用到这个属性。在 inputType里查看这个属性的合法值。
::android:imeOptions
:::关键字。为输入法提供额外的选项。对于大多数对期望输入的文本没有限制的搜索来说,你不需要用到这个属性。默认输入法的执行键值是"actionSearch"(在软键盘上提供一个"搜索"按钮来代替回车符)。在 imeOptions里查看这个属性的合法值。
::* ���索建议项的属性*
::如果你定义了一个content provider来生成搜索建议项,你需要定义额外的属性来配置与content provider的通讯。当提供搜索建议项的时候,你需要以下属性的一部分:
::android:searchSuggestAuthority
:::字符串。(提供搜索建议项必须的。)这个值必须跟Android manifest中android:authorities属性提供的鉴权字符串一致。
::android:searchSuggestPath
:::字符串。这个路径被用作建议项查询 Uri的一部分,位于Uri的前缀和authority之后,但在标准的建议项路径之前。只有当你仅用一个content provider来处理不同类型的建议项(比如不同的数据类型)时会要用到这个属性,并且当你接收到这些建议项查询的时候你要有方式来区分它们。
::android:searchSuggestSelection
:::字符串。这个值将作为"query"#006600">selectionArgs参数中使用任意非空值来触发查询文本的传递(然后忽略selection参数)。
::android:searchSuggestIntentAction
:::字符串。当用户点击自定义搜索建议项时默认使用的intent action(比如"android.intent.action.VIEW")。如果这个值没有被选中的建议项覆盖(通过 SUGGEST_COLUMN_INTENT_ACTION这一列),当用户点击一个建议项的时候这个值将会被赋给 Intent的action字段。
::android:searchSuggestIntentData
:::字符串。当用户点击自定义搜索建议项时默认使用的intent data。如果这个值没有被选中的建议项覆盖(通过 SUGGEST_COLUMN_INTENT_DATA这一列),当用户点击一个建议项的时候这个值将会被赋给 Intent的data字段。
::android:searchSuggestThreshold
:::整型。触发建议项查询的最小字符数。仅保证系统在输入字符数小于这个阀值的情况下不会查询你的content provider。默认值是0。
::想要了解更多关于以上搜索建议项的属性, Adding Recent Query Suggestions和 Adding Custom Suggestions的开发指南。
::* Quick Search Box属性*
::要让你的自定义搜索建议项对Quick Search Box可用,你需要以下属性的一部分:
::android:includeInGlobalSearch
:::布尔值。(对在Quick Search Box里提供搜索建议项来说是必须的。)如果你想让你的建议项被包括在可全局访问的Quick Search Box里,把这个值设为"true"。在你的建议项能在Quick Search Box里显示之前,用户仍然必须在Quick Search Box的设置里面启用你的应用作为一个可搜索项。(译者注:就是说设置这个值为"true"的情况下用户还要在Quick Search Box的设置里面勾选上你的应用,这样才能在Quick Search Box里显示你的建议项。)
::android:searchSettingsDescription
:::字符串。为你提供给Quick Search Box的搜索建议项提供一个简要说明,它会显示在(Quick Search Box设置里面)你应用对应的可搜索项条目中。你的描述应该扼要地描述出什么内容是可搜索的。比如,用“艺术家,唱片,专辑”来描述音乐应用可搜索的内容,或者用“已保存的笔记”来描述记事本应用可搜索的内容。
::android:queryAfterZeroResults
:::布尔值。如果你希望对之前返回0个结果的搜索的超集仍然调用你的content provider,设置这个值为"true"。比如你的content provider对"bo"返回0个结果,那么它会对"bob"重新进行查询。如果这个设为"false",在这个单独的会话里超集将会被忽略("bob"不会调用一个新的查询)。这仅在搜索对话框的生存期或者使用search widget的activity的生存期中持续(当搜索对话框或者activity重新打开的时候,"bo"将再次查询你的content provider)。默认值是false。
::* 语音搜索属性*
::要启用��音搜索,你需��以下属性的一部分:
::android:voiceSearchMode
:::关键字。(对提供语音搜索功能来说是必要的属性。)用指定的模式启用语音搜索。(设备可能不提供语音搜索功能,在这种情况下这些标志将不起作用。)以下是可接受的模式值:
{|style="border-spacing: 0px;margin: 0 4px 0 75px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | Value
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | Description
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
"showVoiceSearchButton"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
如果语音搜索在设备上可用,那么显示一个语音搜索的按钮。如果设置了这个模式,那么"launchWebSearch"和"launchRecognizer"两者之一也必须同时被设置(用|字符分割开来)。
|- style="vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
"launchWebSearch"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
语音搜索按钮把用户直接带到一个内建的语音web搜索activity。大多数应用不需要这个标志,因为它将用户带离了调用搜索的activity。
|- style="vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
"launchRecognizer"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
语音搜索按钮把用户直接带到一个内建的录音activity。这个activity提示用户说话,解码语音文本,讲得到的查询文本转发到搜索activity,就好像用户在search UI输入查询文本然后按下搜索按钮一样。
|}
::android:voiceLanguageModel
:::关键字。语音识别系统应该使用的语言模式。以下是可接受的模式值:
{|style="border-spacing: 0px;margin: 0 4px 0 75px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | Value
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px" | Description
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
"free_form"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |
为口述的查询使用"自由形式"("free-form")的语音识别。这主要是为英语优化的。这是默认值。
|- style="vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
"web_search"
| style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" |
为更短的,类似检索的短语使用网页检索词识别。这种模式支持的语���比"free-form"的更��。
|}
:::你也可以在EXTRA_LANGUAGE_MODEL里查看更多信息。
::android:voicePromptText
:::字符串。显示在语音输入框里的附加信息。
::android:voiceLanguage
:::字符串。期望的语言,用 Locale里面的字符串常量来表示(比如"de"表示德国或者"fr"表示法国)。只有期望的语言跟 Locale.getDefault())的当前值不一样的时候才会需要这个属性。
::android:voiceMaxResults
:::整型。强制返回结果的最大个数,其中包含用于 ACTION_SEARCHintent的主查询的"最佳"结果,这个结果总是会被提供。这个值必须大于等于1。使用 EXTRA_RESULTS从intent里面获取结果。如果没有提供该值,语音识别程序将决定返回多少个结果���
:
::为搜索action指定一个设备的按键和行为。当触摸设备屏幕上的按钮时,搜索action会根据当前查询文本或者获得焦点的建议项来触发一个特定的行为。比如联系人应用在提供了联系人建议项的时候,按下Call按键会提供一个搜索action来初始化一个通话,通话的对象就是当前获得焦点的联系人建议项所对应的联系人。
::不是所有的action键值在任何设备上都是可用的,也不是所有的键值都允许用这种方式来覆盖。比如"Home"键不能被用作action key并且按下它的时候必须返回home界面。同时要确保不要为用于输入查询文本的按键定义action key。这从根本上限定了action keys只能用于拨号键和菜单键。同时也要注意action keys通常不容易被发现,所以你不应该把它们作为核心用户功能提供出来。
::你必须通过指定android:keycode键值来指定一个按键,并且指定其他三个属性中至少一个的值来定义搜索action。
::属性:
:
::android:keycode
:::字符串。(必须的。) KeyEvent中定义的键值(比如"KEYCODE_CALL"),用来代表你所希望响应的那个action key。这个键值被附加到将被传递到你搜索activity中的 ACTION_SEARCHintent中。要查看这个键值,使用 getIntExtra(SearchManager.ACTION_KEY))。不是所有的按键都支持搜索action,因为他们很多都被用作输入,导向和系统功能。
::android:queryActionMsg
:::字符串。当用户正在输入查询文本时按下action key所发送的action信息。这个值被附加到 ACTION_SEARCHintent中,这个intent将会被系统传递到你的搜索activity中去。要查看这个值,使用 getStringExtra(SearchManager.ACTION_MSG))。
::android:suggestActionMsg
:::字符串。当一个建议项获得焦点时按下action key所发送的action信息。这个值被附加到intent中,系统将这个intent(使用你为之前为建议项定义的action)传递到你的搜索activity中去。要查看这个值,使用 getStringExtra(SearchManager.ACTION_MSG))。这仅用于你所有的建议项都支持这个action key的情况下。如果不是所有建议项都能处理同一个action key的话,你应该下面的android:suggestActionMsgColumn属性替代。
::android:suggestActionMsgColumn
:::字符串。你content provider中的列名,用于指定当一个建议项获得焦点时用户按下action key所发送的对应于该action key的action信息。这个属性能让你在逐个建议项的基础上操控action key,这是因为与使用android:queryActionMsg属性为所有的建议项定义一个action信息不同,使用这个属性你content provider每个条目都提供自身对应的一个action信息。
:::首先,你必须在你content provider中定义一列来让每个建议项都提供一个action信息,然后在这个属性中提供这个列名。系统查看你的建议项cursor,使用这个属性提供的字符串找到你action信息的那一列,然后从cursor中找出action信息的字符串。那个被查出来的字符串会被附在系统传递给你的搜索activity的intent(这个intent使用你之前为建议项定义的action)中。要查看这个字符串,使用 getStringExtra(SearchManager.ACTION_MSG))。如果选中的建议项对应的数据不存在,那么这个action key将会被忽略。
示例:
:保存为res/xml/searchable.xml的XML文件
该贴被刘伟编辑于2013-7-1 9:35:25
该贴被刘伟编辑于2013-7-1 9:36:23