Android官方文檔—User Interface(Search)(Searchable Configuration)

可搜索的配置

爲了在Android系統的幫助下實現搜索(向搜索活動提供搜索查詢並提供搜索建議),您的應用程序必須以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

字符串資源。 (必填。)您的申請名稱。它應該與應用於<activity>或<application>清單元素的android:label屬性的名稱相同。當您將android:includeInGlobalSearch設置爲“true”時,此標籤僅對用戶可見,在這種情況下,此標籤用於將您的應用程序標識爲系統搜索設置中的可搜索項。

android:hint

字符串資源。 (推薦。)未輸入文本時在搜索文本字段中顯示的文本。它向用戶提供有關可搜索內容的提示。爲了與其他Android應用程序保持一致,您應該將android:hint的字符串格式化爲“Search <content-or-product>”。例如,“搜索歌曲和藝術家”或“搜索YouTube”。

android:searchMode

關鍵詞。設置控制搜索演示文稿的其他模式。當前可用模式定義在自定義建議獲得焦點時應如何​​重寫查詢文本。接受以下模式值:

Value Description
"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。

搜索建議屬性

如果已定義內容提供程序以生成搜索建議,則需要定義配置與內容提供程序通信的其他屬性。提供搜索建議時,您需要以下一些<searchable>屬性:

android:searchSuggestAuthority

string。 (需要提供搜索建議。)此值必須與Android清單<provider>元素的android:authorities屬性中提供的權限字符串匹配。

android:searchSuggestPath

string。此路徑用作建議查詢Uri的一部分,在前綴和權限之後,但在標準建議路徑之前。只有當您有一個內容提供商發佈不同類型的建議(例如針對不同的數據類型)時,才需要這樣做,並且您需要一種方法來在收到建議查詢時消除歧義。

android:searchSuggestSelection

string。此值作爲選擇參數傳遞到查詢函數中。通常,這是數據庫的WHERE子句,並且應包含單個問號,該問號是用戶鍵入的實際查詢字符串的佔位符(例如,“query =?”)。但是,您還可以使用任何非空值來觸發通過selectionArgs參數傳遞查詢文本(然後忽略選擇參數)。

android:searchSuggestIntentAction

string。用戶單擊自定義搜索建議時使用的默認意圖操作(例如“android.intent.action.VIEW”)。如果未被所選建議覆蓋(通過SUGGEST_COLUMN_INTENT_ACTION列),則當用戶單擊建議時,此值將放置在Intent的操作字段中。

android:searchSuggestIntentData

string。用戶單擊自定義搜索建議時要使用的默認目標數據。如果未被所選建議覆蓋(通過SUGGEST_COLUMN_INTENT_DATA列),則當用戶單擊建議時,此值將放置在Intent的數據字段中。

android:searchSuggestThreshold

整數。觸發建議查找所需的最少字符數。僅保證系統不會向您的內容提供商查詢任何短於閾值的內容。默認值爲0。

有關搜索建議的上述屬性的詳細信息,請參閱添加最近查詢建議和添加自定義建議的指南。

快速搜索框屬性

要使快速搜索框可以使用自定義搜索建議,您需要以下一些<searchable>屬性:

android:includeInGlobalSearch

布爾。 (需要在快速搜索框中提供搜索建議。)如果您希望將建議包含在全局可訪問的快速搜索框中,請設置爲“true”。在您的建議出現在快速搜索框中之前,用戶仍必須將您的應用程序作爲系統搜索設置中的可搜索項目啓用。

android:searchSettingsDescription

string。提供您提供給快速搜索框的搜索建議的簡要說明,該搜索建議顯示在應用程序的可搜索項目條目中。您的描述應簡明扼要地描述可搜索的內容。例如,音樂應用程序的“藝術家,專輯和曲目”,或記事本應用程序的“已保存的音符”。

android:queryAfterZeroResults

布爾。如果希望爲過去返回零結果的查詢的超集調用內容提供程序,請設置爲“true”。例如,如果您的內容提供商爲“bo”返回零結果,則應該要求“bob”。如果設置爲“false”,則單個會話將忽略超集(“bob”不會調用requery)。這僅在搜索對話框的生命週期或使用搜索窗口小部件時的活動時間內持續(當重新打開搜索對話框或活動時,“bo”會再次查詢您的內容提供商)。默認值爲false。

語音搜索屬性

要啓用語音搜索,您需要以下一些<searchable>屬性:

android:voiceSearchMode

關鍵詞。 (需要提供語音搜索功能。)啓用語音搜索,使用特定的語音搜索模式。 (設備可能不提供語音搜索,在這種情況下,這些標誌無效。)接受以下模式值:

Value Description
"showVoiceSearchButton" 如果設備上有語音搜索,則顯示語音搜索按鈕。如果設置,則還必須設置“launchWebSearch”或“launchRecognizer”(由管道|字符分隔)。
"launchWebSearch" 語音搜索按鈕將用戶直接帶入內置語音Web搜索活動。大多數應用程序不需要此標誌,因爲它使用戶遠離調用搜索的活動。
"launchRecognizer" 語音搜索按鈕將用戶直接帶入內置的錄音活動。此活動提示用戶說話,轉錄口頭文本,並將生成的查詢文本轉發到可搜索的活動,就像用戶將其鍵入搜索UI並單擊搜索按鈕一樣。

android:voiceLanguageModel

關鍵詞。語音識別系統應使用的語言模型。接受以下值:

Value Description
"free_form" 使用自由格式語音識別來指示查詢。這主要針對英語進行了優化。這是默認值。
"web_search" 對較短的類似搜索的短語使用網絡搜索術語識別。它提供的語言多於“free_form”。

有關更多信息,另請參閱EXTRA_LANGUAGE_MODEL。

android:voicePromptText

string。要在語音輸入對話框中顯示的其他消息。

android:voiceLanguage

string。預期的口語,表示爲Locale中常量的字符串值(例如德語爲“de”或法語爲“fr”)。僅當它與Locale.getDefault()的當前值不同時才需要它。

android:voiceMaxResults

整數。強制返回最大結果數,包括始終作爲ACTION_SEARCH目標主查詢提供的“最佳”結果。必須是1或更高。使用EXTRA_RESULTS從意圖中獲取結果。如果未提供,識別器將選擇返回多少結果。

<actionkey>

定義搜索操作的設備密鑰和行爲。根據當前查詢或重點建議,搜索操作在觸摸設備上的按鈕時提供特殊行爲。例如,“聯繫人”應用程序提供搜索操作,以便在按下“呼叫”按鈕時啓動對當前關注的聯繫人建議的電話呼叫。

並非所有操作鍵都可用於每個設備,並且不允許以這種方式覆蓋所有鍵。例如,“Home”鍵無法使用,必須始終返回主屏幕。另外,請確保不要爲鍵入搜索查詢所需的鍵定義操作鍵。這實際上限制了可用和合理的操作鍵到呼叫按鈕和菜單按鈕。另請注意,操作鍵通常不可發現,因此您不應將其作爲核心用戶功能提供。

您必須定義android:keycode以定義密鑰,並定義其他三個屬性中的至少一個以定義搜索操作。

屬性:

android:keycode

string。 (必需。)來自KeyEvent的鍵代碼,表示您希望響應的操作鍵(例如“KEYCODE_CALL”)。這將添加到傳遞給您的可搜索活動的ACTION_SEARCH目標中。要檢查密鑰代碼,請使用getIntExtra(SearchManager.ACTION_KEY)。並非所有鍵都支持搜索操作,因爲其中許多鍵用於鍵入,導航或系統功能。

android:queryActionMsg

string。如果在用戶輸入查詢文本時按下操作鍵,則要發送的操作消息。這將添加到系統傳遞給您的可搜索活動的ACTION_SEARCH目標中。要檢查字符串,請使用getStringExtra(SearchManager.ACTION_MSG)。

android:suggestActionMsg

string。如果在建議處於焦點時按下操作鍵,則要發送的操作消息。這被添加到系統傳遞給您的可搜索活動的意圖中(使用您爲建議定義的操作)。要檢查字符串,請使用getStringExtra(SearchManager.ACTION_MSG)。只有在您的所有建議都支持此操作鍵時才應使用此選項。如果不是所有建議都可以處理相同的操作鍵,那麼您必須使用以下android:suggestActionMsgColumn屬性。

android:suggestActionMsgColumn

string。內容提供程序中列的名稱,用於定義此操作鍵的操作消息,如果用戶在建議處於焦點時按下操作鍵,則會發送該列。此屬性允許您在建議的基礎上控制操作鍵,因爲您的內容提供程序中的每個條目都提供了自己的操作消息,而不是使用android:suggestActionMsg屬性來定義所有建議的操作消息。

首先,您必須在內容提供程序中爲每個建議定義一列以提供操作消息,然後在此屬性中提供該列的名稱。系統查看您的建議光標,使用此處提供的字符串選擇您的操作消息列,然後從Cursor中選擇操作消息字符串。該字符串將添加到系統傳遞給您的可搜索活動的意圖中(使用您爲建議定義的操作)。要檢查字符串,請使用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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章