在 Android 系统的协助下实现搜索功能,即提供搜索服务
查询添加到 Activity 并提供搜索建议 - 您的应用必须提供搜索
配置 XML 文件的形式。
本页介绍搜索配置文件的语法和用法。有关
有关如何为您的应用实现搜索功能的信息,请参阅
创建搜索界面。
- 文件位置:
res/xml/filename.xml
Android 会将文件名用作资源 ID。
- 语法:
-
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="string resource"
android:hint="string resource"
android:searchMode=["queryRewriteFromData" | "queryRewriteFromText"]
android:searchButtonText="string resource"
android:inputType="inputType
"
android:imeOptions="imeOptions
"
android:searchSuggestAuthority="string"
android:searchSuggestPath="string"
android:searchSuggestSelection="string"
android:searchSuggestIntentAction="string"
android:searchSuggestIntentData="string"
android:searchSuggestThreshold="int"
android:includeInGlobalSearch=["true" | "false"]
android:searchSettingsDescription="string resource"
android:queryAfterZeroResults=["true" | "false"]
android:voiceSearchMode=["showVoiceSearchButton" | "launchWebSearch" | "launchRecognizer"]
android:voiceLanguageModel=["free-form" | "web_search"]
android:voicePromptText="string resource"
android:voiceLanguage="string"
android:voiceMaxResults="int"
>
<actionkey
android:keycode="KEYCODE
"
android:queryActionMsg="string"
android:suggestActionMsg="string"
android:suggestActionMsgColumn="string" />
</searchable>
- 元素:
-
<searchable>
- 定义 Android 系统用于提供辅助搜索的所有搜索配置。
属性:
android:label
- 字符串资源。(必需)。您的应用的名称。该名称必须与
应用于应用的
android:label
属性的名称,
<activity>
或
<application>
清单元素。只有当您设置了
android:includeInGlobalSearch
到 "true"
,在这种情况下,使用此标签
在系统搜索设置中将您的应用标识为可搜索项。
android:hint
- 字符串资源。(建议)。当搜索文字字段出现时,
未输入任何文字。它可向用户提供关于哪些内容可搜索的提示。保持一致性
对于其他 Android 应用,请将
android:hint
的字符串的格式设置为“Search
<content-or-product>”。例如,“搜索歌曲和音乐人”或
“在 YouTube 中搜索”。
android:searchMode
- 关键字。设置用于控制搜索呈现的其他模式。可用
模式定义了当收到自定义建议时需要如何重写查询文本
关注度。接受以下模式值:
如需了解详情,请参阅有关使用以下代码重写查询文本的文档
添加自定义搜索建议。
android:searchButtonText
- 字符串资源。要显示在用于执行搜索的按钮中的文本。修改者
默认情况下,该按钮会显示一个搜索图标(放大镜),
国际化。因此,除非行为是
而不是搜索的内容,例如网络浏览器中的网址请求。
android:inputType
- 关键字。定义要使用的输入法的类型,例如软键盘的
键盘。对于大多数搜索(需要自由格式文本)来说,您不需要此属性。
请参阅
inputType
,查看以下列表
适合此属性的值。
android:imeOptions
- 关键字。用于为输入法提供其他选项。对于大多数搜索,在
预期的自由格式文本,则不需要此属性。默认 IME 为
actionSearch
,提供“搜索”功能按钮,而不是
软键盘。请参阅imeOptions
获取适合该属性的值的列表。
搜索建议属性
如果您要定义一个 content provider 来生成搜索建议,则需要定义
用于配置与 content provider 的通信的其他属性。提供搜索功能时
您需要以下某些 <searchable>
属性:
android:searchSuggestAuthority
- 字符串。(提供搜索建议所必需的属性)。该值必须与
android:authorities
中提供的授权方字符串
属性。<provider>
android:searchSuggestPath
- 字符串。此路径用作建议的一部分
在前缀后面加上“
Uri
”
并放在标准建议路径之前只有当您拥有
一个内容提供程序发出不同类型的建议,例如针对不同的
因此,您需要在收到查询时,
。
android:searchSuggestSelection
- 字符串。该值会传递到
查询函数作为
selection
参数。这通常是一个 WHERE 子句
并且必须包含一个问号,作为
用户输入的实际查询字符串,例如 "query=?"
。不过,
您还可以使用任何非 null 值,通过
selectionArgs
参数,然后忽略 selection
参数)。
android:searchSuggestIntentAction
- 字符串。用户
点按自定义搜索建议(例如
"android.intent.action.VIEW"
)。
如果该值未被所选建议替换,请使用
SUGGEST_COLUMN_INTENT_ACTION
列中,该值会放置在
当用户点按时 Intent
提供建议。
android:searchSuggestIntentData
- 字符串。用户
。
如果未覆盖所选建议,则使用
SUGGEST_COLUMN_INTENT_DATA
列—该值放置在
当用户点按时 Intent
提供建议。
android:searchSuggestThreshold
- 整数。输入所需的最少字符数
触发查找建议。这只能保证系统不会查询您的
内容提供程序。默认值为 0。
如需详细了解搜索建议的上述属性,请参阅相关文档
(用于添加自定义搜索建议)和
添加自定义建议。
快速搜索框属性
要使您的自定义搜索建议可供快速搜索框使用,您需要
以下 <searchable>
属性:
android:includeInGlobalSearch
- 布尔值。(在
快速搜索框。)如果您想让系统显示建议,请将此项设为
"true"
。用户必须
在系统搜索设置中将您的应用作为可搜索项启用,
您的建议会显示在快速搜索框中。
android:searchSettingsDescription
- 字符串资源。简要说明
快速搜索框会显示在您的
应用。说明必须简明扼要地描述可供搜索的内容。对于
例如,“音乐人、专辑和曲目”或“已保存的记事”针对
记事本应用程序。
android:queryAfterZeroResults
- 布尔值。如果您要将内容提供方设为
"true"
,请将
为先前返回零结果的查询的超集调用。例如,如果
对于“bob”,您的内容提供程序会返回零个结果,必须查询“bob”。如果
设为 "false"
,系统会忽略单个会话“bob”的超集
不会调用重新查询。此设置仅在搜索对话框的生命周期或
使用搜索微件时,与 Activity 相关联。重新打开搜索对话框或 activity 时,
“bo”再次查询内容提供程序默认值为 false。
语音搜索属性
要启用语音搜索,
以下 <searchable>
属性:
android:voiceSearchMode
- 关键字。(必须提供语音搜索功能。)
使用特定的语音搜索模式启用语音搜索。
语音搜索可能不是设备提供的,在这种情况下,这些标志
无效。接受以下模式值:
值 | 说明 |
"showVoiceSearchButton" |
如果可在设备上使用语音搜索,则显示语音搜索按钮。如果已设置,
则还必须设置 "launchWebSearch" 或 "launchRecognizer" 。
使用竖线 (| ) 字符分隔。 |
"launchWebSearch" |
语音搜索按钮可将用户直接转到
。大多数应用都不会使用此标记,因为
它会让用户离开调用搜索的 activity。 |
"launchRecognizer" |
使用语音搜索按钮时,
将用户直接转到内置的录音 activity。此活动
提示用户说话、转录所说的文字,然后将生成的译文
将查询文本添加到可搜索 Activity,就好像用户在
搜索界面并点按搜索按钮。 |
android:voiceLanguageModel
- 关键字。这个语言模型
必须由语音识别系统使用。接受以下值:
值 | 说明 |
"free_form" |
对口述查询使用自由格式语音识别。这主要用于
只针对英语进行了优化这是默认值。 |
"web_search" |
对较短的搜索式短语使用网页搜索字词识别。这是
支持的语言比 "free_form" 还多。 |
请参阅
EXTRA_LANGUAGE_MODEL
了解详情
信息。
android:voicePromptText
- 字符串资源。要显示在语音输入对话框中的附加消息。
android:voiceLanguage
- 字符串。预期的母语,表示为
Locale
中的一个常量,例如
"de"
表示德语,"fr"
表示法语。仅当与当前 ID 值的 ID 不同时,才需要指定此字段
Locale.getDefault()
的当前值。
android:voiceMaxResults
- 整数。设置要返回的结果数上限,
包括“最佳”结果,这始终作为
ACTION_SEARCH
intent 的主要查询。必须等于或大于 1。使用
EXTRA_RESULTS
从 intent 中获取结果。
如果未提供,将由识别程序选择要返回多少结果。
<actionkey>
- 定义搜索操作的设备键和行为。搜索操作提供了一种特殊的
点按设备上的按钮时的行为(基于当前查询或聚焦的行为)
建议。例如,“通讯录”应用提供用于发起通话的搜索操作
当用户点按“呼叫”按钮时,呼叫当前聚焦的联系人建议。
并非所有操作键都适用于所有设备,也并非所有操作键都可在
。例如,“首页”且必须始终返回主屏幕
屏幕。此外,切勿为输入搜索内容所需的键定义操作键
查询。这会将可用且合理的操作键限制为通话按钮和菜单
按钮。
<ph type="x-smartling-placeholder">
您必须定义 android:keycode
才能定义键和至少一个
其他三个属性来定义搜索操作
属性:
android:keycode
- 字符串。(必需)。来自
KeyEvent
,表示
您要响应的操作键(例如 "KEYCODE_CALL"
)。这个
会添加到
ACTION_SEARCH
传递给可搜索 activity 的 intent。要检查该键码,请使用
getIntExtra(SearchManager.ACTION_KEY)
。
搜索操作并不支持所有键,因为很多键用于输入内容,
导航或系统功能。
android:queryActionMsg
- 字符串。按下操作键后要发送的操作消息
用户输入查询文本。该 ID 会添加到
ACTION_SEARCH
intent。要检查该字符串,请使用
getStringExtra(SearchManager.ACTION_MSG)
。
android:suggestActionMsg
- 字符串。在
获得焦点。这会添加到系统传递给您的
可搜索 activity - 使用您为建议定义的操作。要检查
字符串,使用
getStringExtra(SearchManager.ACTION_MSG)
。
仅当您的所有建议都支持此操作键时,才需要使用此选项。如果不是全部
建议可以处理相同的操作键,那么您必须改用以下
android:suggestActionMsgColumn
属性。
android:suggestActionMsgColumn
- 字符串。内容提供程序中用于定义
此操作键的操作消息,将在用户按下操作键时发送
。通过此属性,您可以控制
而不是使用
android:suggestActionMsg
属性,用于定义所有操作消息
内容提供程序中的每个条目都会提供自己的操作消息。
首先,您必须在 content provider 中定义一列,以便提供每条建议
的操作消息,然后在此属性中提供该列的名称。系统
看着您的建议游标,并使用此处提供的字符串选择您的操作
message 列,然后从光标中选择操作消息字符串。该字符串是
添加到系统传递给可搜索 Activity 的 intent 中,并使用
定义以提供建议。要检查该字符串,请使用
getStringExtra(SearchManager.ACTION_MSG)
。
如果所选建议对应的数据不存在,系统会忽略操作键。
- 示例:
- 保存在
res/xml/searchable.xml
的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search_label"
android:hint="@string/search_hint"
android:searchSuggestAuthority="dictionary"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:includeInGlobalSearch="true"
android:searchSettingsDescription="@string/settings_description" >
</searchable>