Android ApiDemos示例解析(36):App->Search->Invoke Search

Search (搜索)是Android平台的一个核心功能之一,用户可以在手机搜索在线的或是本地的信息。Android平台为所有需要 提供搜索或是查询功能的应用提供了一个统一的Search Framework来帮助实现Search功能。Search Framework的UI可以有两种形 式:

屏幕顶部的Search Dialog:如Google Map提供的搜索条。

可以嵌到ContentView中的SearchView,应用可以将它放在屏幕上任何地方。

不管采用那种UI,Android系统都可以通过向某个指定Activity发送需要查询的内容来帮助应用实现查询功能。同时Android 也支持查询提示,如下图所示:

除此之外,Android查询UI可以支持:

语音查询

根据用户输入提供查询提示列表

支持应用自定义查询提示列表来匹配用户输入

在系统全局搜索(System-wide Quick Search Box)提供你的应用相关的查询提示列表

Invoke Search介绍了如何使用Search Framework 并采用Search dialog 的方式在屏幕顶部显示查询条。下面结合例子介绍 使用Search Framework的一般步骤:

Create a Search Interface

本例采用屏幕顶部Search Dialog的方式。在这 种方式下,Android操作系统接管所有Search Dialog的事件,当用户提交查询后,Android系统将给支持的用来处理查询的 Activity发送消息。Search Dialog可以提供查询提示列表来匹配用户输入。

用户提交查询后,Android系统构造一个 Intent并把用户的查询内容放在这个Intent中。然后Android启动你定义的用来处理用户查询的Activity(称为Searchable Activity),并把这个Intent发给该Activity。为了能够使用Android系统提供的Search Framework.需要以下几步:

1. Creating a Searchable Configuration

首先定义一个Searchable configuration,用于描述Search Dialog 的一些属性 ,该描述文件按惯例通常命名为searchable.xml 并定义在/res/xml 目录下。

<searchable xmlns:android=” http://schemas.android.com/apk/res/android”

android:label=”@string/search_label”

android:hint=” @string/search_hint”

android:searchMode=”showSearchLabelAsBadge”

android:voiceSearchMode=” showVoiceSearchButton|launchRecognizer”

android:voiceLanguageModel=”free_form”

android:voicePromptText=” @string/search_invoke”

android:searchSuggestAuthority=”com.example.android.apis.SuggestionProvider”

android:searchSuggestSelection=” ? ”

/>

只有android:label是必须的,一般定义为应用程序的名称。尽 管不是必须的,一般也会定义android:hint。这个属性定义查询框没有任何输入时的背景文字。如上图中的”Search the dictionary” 。本例中为“Search Demo Hint”来提示用户可以输入的内容。

时间: 2024-08-04 10:01:12

Android ApiDemos示例解析(36):App-&gt;Search-&gt;Invoke Search的相关文章

Android ApiDemos示例解析(37):App-&amp;gt;Search-&amp;gt;Query Search Results

这个例子单独运行时(从Launcher启动),这时接受到的Intent不含ACTION_SEARCH,和一个普通的Activity没有什么两样. 在例(36)时,它是作为查询处理Activity用于显示用户查询内容. SearchQueryResults 在AndroidManifest.xml定义为 Searchable Activity: <intent-filter> <action android:name="android.intent.action.SEARCH&q

Android ApiDemos示例解析(43):App-&amp;gt;Service-&amp;gt;Remote Service Controller

Remote Service Controller 和使用Local Service的Android ApiDemo示例解析(40):App->Service->Local Service Controller 都是使用Service的"Started" 模式,RemoteService在 AndroidManifest.xml中的定义如下: <service android:name=".app.RemoteService" android:pr

Android ApiDemos示例解析(35):App-&amp;gt;Preferences-&amp;gt;Advanced preferences

前篇文章Android ApiDemo示例解析(31):App->Preferences->Launching preferences 中用到了Advanced preferences 中定义的AdvancedPreferences. 本篇具体介绍AdvancedPreferences, 这个例子称为Advanced ,是因为 它涉及到了自定义Preference, 并在一个工作线程中刷新某个Preference的值. Preference 为显示在 PreferenceActivity (一

Android ApiDemos示例解析(30) App-&amp;gt;Preferences-&amp;gt;Preferences from XML

我们在前面的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 介绍了可以使用Shared Preferences来存储一些状态,Shared Preferences更一般的用法是用来存储一些应用程序偏好(设置). 包 android.preference 提供了很多类可以方便应用程序来显示和设置应用相关的偏好.当然你可以使用自定义的UI来配置这些程 序偏好.但使用android.preference中定义的类可以给用户一个统一的U

Android ApiDemos示例解析(14) App-&amp;gt;Activity-&amp;gt;Save &amp;amp; Restore State

Save & Restore State与之前的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 实现的 UI类似,但功能和实现方法稍有不同.(9)是通过Shared Preferences 和 Activity 的onPause() ,和onResume()来保持UI中 EditText 的值.本例是通过onSaveInstanceState(Bundle savedBundle) 来实现保持UI状态. 和onPause

Android ApiDemos示例解析(21) App-&amp;gt;Device Admin

Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 类 DevicePolicyManager 用于管理Android设备定义的一些策略,主要指密码定义的长度,密码是否要含大写字母,小写字母等设 置密码需要满足的规范,锁定设备或是清除所有用户数据,这个类一般需要配合DeviceAdminReceiver来使用. DeviceAdminReceiver派生于BroadcastReceiver,可以接受

Android ApiDemos示例解析(13) App-&amp;gt;Activity-&amp;gt;Reorder Activities

Reorder Activities 示例有四个相关的Activitives: ReorderOnLaunch, ReorderTwo,ReorderThree, ReorderFour.其中ReorderOnLaunch为主Activity,ReorderOnLaunch启动ReorderTwo ,ReorderTwo启动 ReorderThree,ReorderThree启动 ReorderFour. 这时在Activity的"back stack"有如下状态: ReorderFo

Android ApiDemos示例解析(10) App-&amp;gt;Activity-&amp;gt;QuickContactsDemo

QuickContactsDemo示例介绍了如果使用Content Provider来访问Android系统的Contacts 数据库. Content Provider为不同应用之间共享数据提供了统一的接口,通过对底层数据源的抽象,Content Provider实现了应用程序代码和数 据层分离.Android平台对大部分的系统数据库都提供了对应的Content Provider接口: Browser: 读取和修改Bookmark,Browser history或Web Searches. C

Android ApiDemos示例解析(6) App-&amp;gt;Activity-&amp;gt;Dialog

在Custom Dialog中说过可以将Activity的Theme定义为Dialog风格,使得Activity看起来像是个对话框(Dialog),而 Custome Title 说明如果自定义标题栏. Dialog示例同样使用Dialog风格来显示Activity,同时为Titlebar 设置坐标的图标. DialogActivity使用Android系统定义的Dialog Theme: <activity android:name=".app.DialogActivity"