Searchable Configuration

译者署名:呆呆大虾

译者链接:

版本:Android 4.0 r1

参阅

创建搜索界面

添加最近请求建议项

添加自定义建议项

为了能在Android系统的辅助下(发送搜索请求到activity并提供搜索建议项)实现搜索功能,应用程序必须提供一个XML格式的搜索配置文件。

本文描述了搜索配置文件的语法和使用方式。关于应用程序如何实现搜索特性的详细信息,在开发者指南的 创建搜索界面 中进行描述。

文件位置:

res/xml/filename.xml
Android用文件名作为资源ID。

语法:

<?xml version="1.0" encoding="utf-8"?>

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

字符串资源。(必填项。)应用程序的名称。应该是与<activity> 或manifest中<application>元素的android:label属性相一致。仅当android:includeInGlobalSearch设为“true”时,用户才能看见本文本标签。这时标签用于标识本应用程序,并作为可搜索项显示在系统的搜索设置菜单中。

android:hint

字符串资源。(建议项。)在没有录入文字时,显示在搜索文本框中的文本。它向用户提示了可搜索的内容。为了与其它Android 应用保持一致,应该把android:hint定义的文本写成“搜索<内容-或-产品>”的格式。例如,“搜索歌曲和艺术家”或“搜索YouTube”。

android:searchMode

关键字。设置控制搜索显示的其它模式。目前可用的模式定义了自定义建议项获得焦点时搜索文本的改写方式。以下列出了可用的模式:

描述

"queryRewriteFromText"

用SUGGEST_COLUMN_TEXT_1列中的值改写查询请求文本。

"queryRewriteFromData"

用SUGGEST_COLUMN_INTENT_DATA列中的值改写查询请求文本。仅当SUGGEST_COLUMN_INTENT_DATA中的值符合用户的要求并开始编辑时才会用到,典型的场合是HTTP URI 。

详情请参阅添加自定义建议项中关于改写请求文本的部分。

android:searchButtonText

字符串资源。显示在执行搜索按钮上的文本。默认情况下,按钮上会显示一个搜索图标(放大镜),这是理想的国际化方案。除非某些时候不是要执行搜索操作(比如Web浏览器中的URL请求),否则不应该使用本属性来改变按钮的显示。

android:inputType

关键字。定义了要使用的录入方式(比如软键盘)。大多数搜索都需要能录入任意字符,也就不必用到本属性。本属性可用值的清单请参阅inputType。

android:imeOptions

关键字。提供录入方式的其它选项。大多数搜索都需要能录入任意字符,也就不必用到本属性。缺省的IME 是“actionSearch”(在软键盘上提供“搜索”按钮并取代回车)。本属性可用值的清单请参阅imeOptions。

搜索建议项的属性

如果定义了content provider来提供搜索建议项,则需要定义更多的属性来对content provider的交互进行配置。当提供自定义建议项时,需要以下<searchable>属性:

android:searchSuggestAuthority

字符串。(提供搜索建议项时需要。)本属性值必须符合Android manifest文件中<provider>元素的android:authorities属性所提供的权限。

android:searchSuggestPath

字符串。该路径用作建议项请求Uri的组成部分,位于前缀和权限之后,但在标准建议项路径之前。仅当只有一个content provider来提供多种建议项时(比如不同数据类型),才需要用到该属性,并且需要采取必要措施来消除建议项请求的歧义(区分出不同的建议项请求)。

android:searchSuggestSelection

字符串。该值将作为selection参数传给查询函数。典型的情况是一个数据库WHERE语句,并应包含一个问号作为用户录入的实际查询字符的占位符(比如"query=?")。当然也可以通过在selectionArgs参数中指定任何非空值来触发查询文本的传递(这样就会忽略selection参数)。

android:searchSuggestIntentAction

字符串。用户点击自定义搜索建议项时(比如"android.intent.action.VIEW")默认使用的intent action。如果未被选中建议项覆盖(通过SUGGEST_COLUMN_INTENT_ACTION列),则用户点击建议项时本属性值将被放入Intent的action部分。

android:searchSuggestIntentData

字符串。用户点击自定义搜索建议项时默认使用的intent data。如果未被选中建议项覆盖(通过SUGGEST_COLUMN_INTENT_DATA列),则用户点击建议项时本属性值将被放入Intent的data部分。

android:searchSuggestThreshold

整数。请求文本的字符数量至少要大于该数值才会触发建议项的查询。系统只保证不会向content provider 提交任何短于该阈值的查询请求。默认值是0。

关于以上搜索建议项属性的详情,请参阅开发者指南的添加最近请求建议项和添加自定义建议项部分。

“快速搜索框”的属性

为了让自定义建议项能被用于“快速搜索框”,需要以下<searchable>属性:

android:includeInGlobalSearch

布尔值。(在“快速搜索框”中提供搜索建议项时需要。)如果建议项需被用于全局访问的“快速搜索框”,则设为“true”。用户还是必须先在系统的搜索配置菜单中启用应用程序对应的可搜索项,然后建议项才能出现在“快速搜索框”中。

android:searchSettingsDescription

字符串。为提交给“快速搜索框”的搜索建议项提供简要描述信息,这些信息将显示在应用程序对应的可搜索项条目中(搜索配置菜单内)。描述信息应该简要描述可搜索的内容。比如:音乐程序可以是“艺术家、专辑名和音轨”,记事本程序则可以是“已保存的记录”。

android:queryAfterZeroResults

布尔值。如果需要让content provider能够接受搜索请求的超集,则设置为“true”,这些请求在以前搜索时返回结果为零。比如,如果content provider对“bo”返回0个结果,则应该要搜索“bob”。如果设为“false”,同一个session中将忽略超集(“bob”将不会再次发起请求)。不过这只会维持至搜索对话框生命周期结束,如果使用搜索widget则是到activity生命周期结束(当搜索对话框或activity重新被打开时,“bo”会再次向content provider提交请求)。默认值是false。

语音搜索的属性

为了启用语音搜索功能,需要以下<searchable>属性中的一些:

android:voiceSearchMode

关键字。(提供语音搜索功能时需要。)启用语音搜索功能,并同时指定搜索模式。(某些设备可能不支持语音搜索,那这些标记就无效。)可以接受以下模式值:

描述

"showVoiceSearchButton"

如果设备支持语音搜索,则显示一个语音搜索按钮。如果设置此值,则必须同时设置"launchWebSearch"或"launchRecognizer"(用管道符“|”分隔)。

"launchWebSearch"

语音搜索按钮让用户直接使用内置的语音web搜索activity。绝大部分应用程序不需要用到本标记,因为它会使得用户离开提交搜索的当前activity。

"launchRecognizer"

语音搜索按钮让用户直接使用内置的录音activity。该activity将会引导用户说话,把语音转译为文本,并把结果作为请求文本提交给搜索activity,就如同用户在搜索界面录入并点击搜索按钮一样。

android:voiceLanguageModel

关键字。语音识别系统使用的语言模式。可接受以下值:

描述

"free_form"

语音识别使用自由模式(free-form)。这种模式主要是为英语优化的。这是缺省值。

"web_search"

语音识别使用web检索词(web-search-term)模式,用于简短的、类似检索关键词的短语。该模式可用的语言比上述自由模式“free_form”多一些。

详情请参阅EXTRA_LANGUAGE_MODEL。

android:voicePromptText

字符串。显示在语音输入对话框中的其它信息。

android:voiceLanguage

字符串。期望的语言,用Locale中的字符串常量表示(比如“de”表示德语,“”表示法语)。仅当所用语言与Locale.getDefault()获得的当前值不同时,才需要用到本值。

android:voiceMaxResults

整数。指定最多返回几个结果,其中的“最佳”结果将用于ACTION_SEARCH intent的主要请求文本。本值必须大于等于1。用EXTRA_RESULTS可以从intent获取这些结果。如果未提供本值,则语音识别程序将会确定返回结果的数量。

<actionkey>

为搜索action指定一个设备上的按键及动作。在触摸屏幕按钮时,根据当前搜索请求或当前获得焦点的建议项,搜索action将能执行设定的操作。比如,联系人应用程序在按下通话按钮时能够执行启动电话的搜索action,与当前获得焦点的联系人建议项进行通话。

并不是每台设备都支持全部的action键,也不是所有键都允许用这种方式覆盖。比如,“Home”键就不行,它必须保证能返回初始屏幕。还必须确保不要指定为录入搜索请求时可能会用到的键。本属性基本上仅限于指定为通话按钮和菜单按钮。请记住action键通常不是很显眼,因此不应该把它作为核心功能来提供给用户。

必须定义android:keycode来指定键,并至少要同时指定另外三个属性中的一个,才能完成搜索action的定义。

属性:

android:keycode

字符串。(必填项)KeyEvent中定义的键值,代表所响应的action键(比如“KEYCODE_CALL”)。本值将附在ACTION_SEARCH intent中传递给搜索activity。用getIntExtra(SearchManager.ACTION_KEY)可以获取本值。并非所有键都可用于搜索action,多数键是用于录入键盘或者系统功能键的。

android:queryActionMsg

字符串。在用户录入搜索请求文本时,按下action键所附带的action信息。本值将附在ACTION_SEARCH intent中传递给搜索activity。用getStringExtra(SearchManager.ACTION_MSG)可以获取本值。

android:suggestActionMsg

字符串。在建议项获得焦点时,按下action键所附带的action信息。本值将附在系统传递给搜索activity 的intent中(使用预先定义的建议项对应的action)。用getStringExtra(SearchManager.ACTION_MSG)可以获取本值。仅当所有建议项都支持本action 键时才能使用本属性。如果不是所有建议项都能处理同一个action键,必须换用下面的android:suggestActionMsgColumn属性。

android:suggestActionMsgColumn

字符串。content provider中的数据列名,用于提供本action键对应的action信息,在建议项获得焦点时,按下action键将发送该action信息。本属性可以控制每个建议项各自的action键,content provider中的每一条数据都有自己的action 信息。本属性可以取代android:suggestActionMsg属性,因为它为所有建议项指定相同的action信息。

首先,必须在content provider中为每个建议项定义数据列,用于提供action信息,然后在本属性中给出列名。系统会用本属性给出的字符串在建议项cursor中查找,选中action信息列,并读取Cursor 中的action信息。本值将附在系统传递给搜索activity 的intent中(使用预先定义的建议项对应的action)。用getStringExtra(SearchManager.ACTION_MSG)可以获取本值。如果选定建议项对应的数据不存在,action键将被忽略。

示例:

保存于res/xml/searchable.xml的XML文件:

<?xml version="1.0" encoding="utf-8"?>

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

Android开发者指南-搜索配置文件-Searchable Configuration[原创译文]相关推荐

  1. android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...

    Android 平台支持很多监测设备运动的传感器.其中有两个传感器一定是基于硬件的(加速度计和陀螺仪),有三个可能基于硬件或软件(重力计.线性加速计和旋转向量传感器). 比如,某些设备的软传感器利用加 ...

  2. android 方向sensor,Android开发者指南-方位传感器-Position Sensor[原创译文]

    Android 平台提供了两种传感器来检测设备的方位:地磁传感器和方向传感器. Android 平台还提供了一种传感器,用于检测屏幕表面与其它物体的邻近程度,即被称为距离传感器. 地磁传感器和距离传感 ...

  3. Android开发者指南

    SDK Android开发者指南-- With AVD Manager 前言 本章内容为开发者指南(Dev Guide)/Developing/Managing Virtual Devices/Wit ...

  4. Android开发者指南(1) —— Android Debug Bridge(adb)

    Android Debug Bridge Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具,采用了客户端-服务器模型,包括三个部分: * 客户端部分,运行在开发用的电脑上,可 ...

  5. Android开发者指南(22) —— Accessing Resources

    前言 本章内容为Android开发者指南的Framework Topics/Application Resources/Accessing Resources章节,译为"资源调用" ...

  6. Android开发者指南(29) —— USB Host and Accessory

    前言 本章内容为Android开发者指南的 USB章节,译为"USB主从设备",版本为Android 4.0 r1,翻译来自:"太阳火神的美丽人生",欢迎访问他 ...

  7. Android开发者指南24难点各个击破—来自androi中文翻译组

    声明 欢迎转载,但请保留文章原始出处               安卓航班开发:http://www.apkway.com/forum.php 博客园:http://www.cnblogs.com/ ...

  8. Android开发者指南(25) —— Resource Types - Style

    样式资源 样式资源定义了用户界面(UI)的格式和外观.样式能被应用到单独的View (通过置入layout 文件),或者整个Activity及应用程序(通过置入manifest文件). 关于创建及应用 ...

  9. Android开发者指南-片段(Fragment)

    片段(Fragment) 发表于 2011 年 09 月 15 日 由 微風 一个片段代表了一个Activity的一种行为或是其用户界面的一个区域.可以在一个单独的活动中组合多个分片来组建一个多面板U ...

最新文章

  1. SAPPHIRE NOW阿里云 - 国内传播
  2. docker设置国内镜像源
  3. touchstart与click同时触发
  4. kafka redis vs 发布订阅_发布订阅的消息系统 Kafka的深度解析
  5. Notepad++ 大小写转换
  6. 它在计算机房的旁边英文,计算机房设备搬迁协议 (中英文)
  7. linux mdamd工具安装,ubuntu 13.04amd64安装 wine 1.5 office2010
  8. kotlin函数_Kotlin函数
  9. 蓝点中文Linux2.0 实验十三 进程与作业管理
  10. Chrome 大版本更新来了,这是一次「史诗级」增强
  11. Android实现录屏直播(一)ScreenRecorder的简单分析
  12. python播放音频文件——playsound
  13. VMware16创建虚拟机:无法创建新虚拟机,不具备执行此操作的权限
  14. 2021-08-27-亚马逊 MWS 坑 handling time(handing time)
  15. 整理阿里巴巴社招最新面试题及答案,附复学习笔记,面试成功归来
  16. 阿卡迪亚大学计算机专业好考吗,申请阿卡迪亚大学究竟难不难?
  17. 多表(三个表)插入与删除操作
  18. OpenCV+Python识别车牌和字符分割
  19. php 小程序 运动步数_【小程序+ thinkphp5】 获取微信运动数据
  20. 全国大学生大数据技能竞赛(Hadoop集群搭建)

热门文章

  1. SCAPY官方教程四
  2. 安全测试:xss,cookie,xst注入攻防
  3. 当液晶显示屏发生漏液时该如何亡羊补牢?
  4. Android抓包-Charles弱网环境模拟
  5. Alexa详细排名数据完成
  6. Gartner 发布中国IaaS PaaS市场服务报告,天翼云强势入选
  7. RecyclerView的万能分割线
  8. ORACLE- check 检查约束
  9. 快速入门Mybatis初学笔记(二)
  10. netdisk 基于Flask的个人网盘