Android Search - Part 1

創(chuàng)建搜索界面

Android提供個(gè)兩個(gè)方法用于創(chuàng)建搜索界面:

  • 搜索對話框:一個(gè)由Android System控制的UI組件,并由用戶配置激活顯示在Activity的頂部。Android系統(tǒng)控制對話框中的所有事件。
searchDialog.png
  • 搜索組件:是SearchView的一個(gè)實(shí)例,它的行為類似EditText,可以放置在界面任何地方,需要對它進(jìn)行配置以讓Android系統(tǒng)進(jìn)行處理事件。Google建議將之放置ActionBar中。當(dāng)然,開發(fā)者也可以通過SearchView里的回調(diào)方法和監(jiān)聽器去處理用戶事件。
searchview.png

由此可見,使用SearchView會更加靈活。
相同之處,兩者都要對SearchableInfo進(jìn)行配置。
不同之處為,搜索對話框需要調(diào)用activity的onSearchRequested()激活顯示。而SearchView則需要默認(rèn)顯示,只須決定其初始的顯示狀態(tài)為展開或閉合。

配置

當(dāng)用戶在搜索框或用搜索組件執(zhí)行了一個(gè)搜索,系統(tǒng)創(chuàng)建了一個(gè)附帶了用戶查詢詞的Intent,并啟動activity去處理搜索。為了滿足以上要求,需要以下東西:

  • 搜索配置:一個(gè)XML文件searchable.xml,可以配置語音搜索、搜索建議和提示詞。
  • 在manifest.xml中配置一個(gè)用于執(zhí)行搜索并顯示結(jié)果的Activity
  • 一個(gè)搜索入口:搜索對話框或搜索組件
創(chuàng)建searchable.xml
  • 創(chuàng)建路徑:res/xml
  • 對語音搜索,搜索建議和提示詞進(jìn)行配置
    例子如下:
<?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>
創(chuàng)建一個(gè)Searchable Activity

Searchable Activity用于執(zhí)行搜索并顯示結(jié)果。當(dāng)用戶在搜索框或搜索組件上開始搜索時(shí),該Searchable Activity會收到一個(gè)附帶搜索詞而且類型為ACTION_SEARCH的Intent.為達(dá)到該目的,開發(fā)者需要在manifest.xml中對Searchable Activity進(jìn)行指定,如下,其中ActivityWithDialog就是用于搜索的Activity。

        <activity
            android:name=".searchsample.ActivityWithDialog"
            android:label="@string/title_activity_activity_with_dialog"
            android:launchMode="singleTop"
            android:theme="@style/AppTheme.NoActionBar">

            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
            <meta-data android:name="android.app.default_searchable"
                android:value=".searchsample.MainSearchActivity"/>
        </activity>

注意,搜索框或搜索組件所在的Activity,也可以用于執(zhí)行搜索和顯示搜索結(jié)果,即輸入搜索詞的Activity和基于搜索詞進(jìn)行搜索和顯示的Activity可以是同一個(gè)Activity。上面的例子就是這種情況。
但是,兩種方式的處理方法有所不同:

  • 用一個(gè)Activity時(shí),需要重寫Activity的onNewIntent()方法,并在manifest.xml種設(shè)置activity的lauchMode為singleTop.
  • 用兩個(gè)Activity時(shí),只須在被啟動的activity中的onCreate()方法中使用getIntent()獲得前一個(gè)activity的傳遞過來的附帶查詢詞的intent.
執(zhí)行搜索
  • 接收帶搜索詞的Intent
  • 搜索
    1 本地搜索
    2 云端搜索

search dialog對activity聲明周期的影響

搜索對話框彈出后,activity只是失去焦點(diǎn),onPause()并不會被調(diào)用。

注:本篇文章主要在閱讀完官方文檔后的一個(gè)小結(jié),后面會繼續(xù)探索Search方面的使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,317評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,889評論 25 709
  • 1、想起好久沒看曾的博客,就去看了下,之所以一直關(guān)注他,不是他寫的東西好,想看他究竟會有怎樣下場。一個(gè)寫詩和小說都...
    瞿桂林閱讀 33評論 0 0
  • 作者比爾·胡戈特伯,在引言里面就告訴讀者,“盯著一棵樹,你看不到它怎樣長高,但它生長不輟。人也是同樣的道理...
    想上天的美人魚秋秋閱讀 343評論 0 0
  • 失意后的調(diào)整,可以在刺激后,得到很好的改善。尤其是,換作另一種形式的互助。傾訴、溝通、化解。 很多時(shí)候,在不同階段...
    短發(fā)司機(jī)閱讀 373評論 0 0

友情鏈接更多精彩內(nèi)容