文章來源:http://developer.android.com/guide/topics/search/search-dialog.html
一、前言:
Android為程序的搜索功能提供了統一的搜索接口,search dialog和search widget。
search dialog只能為於activity窗口的上方,search widget可以位於任何位置。
search dialog和search widget都會向我們的searchable activity發送消息(主要是搜索關鍵字)。
通過這種方式,可以為任何activity加入search dialog和search widget,系統可以啟動合適的activity來處理搜索並顯示結果。
search dialog和search widget的
其他屬性
如下:
A:
聲音搜索。
B:
根據最近的搜索結果,給出搜索建議。
C:
根據我們程序的實際搜索結果,給出搜索建議。
注1:
search widget在 Android 3.0或更高版本才可用
注2:
searchable activity才是真正執行搜索的。
二、基本知識
在開始實現搜索功能之前,請決定使用search dialog,還是search widget.
他們的搜索功能特性都有一樣,但是他們還有微小區別。
A,
search dialog是一個被系統控制的UI組件。但他被用戶激活的時候,它總是出現在activity的上方,如圖一所示。
B,
Android系統負責處理search dialog上所有的事件,當用戶提交了查詢,系統會把這個查詢請求傳輸到我們的searchable activity,
讓searchable activity在處理真正的查詢。當用戶在輸入的時候,search dialog還能提供搜索建議。
C,
search widget是SearchView的一個實例,你可以把它放在你的布局的任何地方。
D,
默認的,search widget和一個標准的EditText widget一樣,不能做任何事情。
但是你可以配置它,讓android系統處理所有的按鍵事件,把查詢請求傳輸給合適的activity,可以配置它讓它像search dialog一樣提供search suggestions。
E,
search widget在 Android 3.0或更高版本才可用. search dialog沒有此項限制
提示:
如果你想自己在search widget處理所有的用戶輸入,請使用各種回調函數和監聽接口,具體參照
SearchView 。
圖一:
當用戶在search dialog或search widget中執行一個搜索的時候,系統會創建一個Intent,並把查詢關鍵字保存在里面,
然后啟動我們在AndroidManifest.xml中聲明好的searchable activity,並把Intent傳送給它。
實現一個可以搜索的程序,主要需要以下幾個部份:
(1),
search dialog or widget的配置文件。
配置一個XML文件用於配置search dialog 或widget的設置。對於search dialog,該配置文件的名字一般約定為
searchable.xml
(2),
searchable activity。
searchable activity用於接收搜索關鍵字,並進行數據搜索和顯示搜索結果。
(3),
搜索條。search dialog 或search widget
* The search dialog
默認的,search dialog是隱藏。當我們按下了SEARCH鍵或在程序中調用
onSearchRequested()
,它將出現在屏幕的上方.
* a SearchView widget
使用search widget的時候,你可以把該搜索條放在我們activity的任何地方。
Instead of putting it in your activity layout, however, it's usually more convenient for users as an action view in the Action Bar.
三、創建配置文件searchable.xml
配置文件說明了search dialog 或widget的一些屬性。包括UI,以及suggestions 和voice search behave的一些屬性。
該文件一般約定為
searchable.xml
並位於
res/xml/
目錄下。
searchable.xml
必須以
<searchable>
element 作
為根節點
,且
至少定義一個屬性
。
比如,示例1:
<?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
是唯一
必須定義
的屬性。它指向一個字符串,它應該是
應用程序的名字
。
實際上該
label
也只有在search suggestions for Quick Search Box可用時才可見。
這時該label在系統設置的Searchable項的列表中可見
。
雖然a
ndroid:hint
屬性不是必須,但是還是推介總是定義它。它是search box用戶輸入前
輸入框中的提示語
。
<searchable> 還有其他的一些屬性。如果不需要search suggestions 和voice search的話,大多數的屬性是不需要的。
關於
searchable.xml
更多內容請參考:
http://developer.android.com/guide/topics/search/searchable-config.html
