在Android中,搜索是一個很是核心的功能,咱們能夠經過它搜索到任意咱們能夠得到的信息。這些信息能夠是存儲在手機中的聯繫人、文件等信息,也能夠是在網絡上的資源。html
Android爲了給用戶提供良好的搜索體驗,特地提供了一個搜索框架來方便開發者在本身的App中集成搜索功能。那麼接下來我就學習一下這個搜索框架。android
在Android的搜索框架中爲咱們提供了兩種搜索的UI控件,它們分別是:網絡
Search Dialog就是浮動在Activity上方的,由系統管理的搜索控件。它不參與Activity的生命週期。app
Search Wiget這是一個相似於EditView的控件,你能夠將它隨意擺放在任意你須要的位置。框架
這裏咱們主要學習Search Dialog的使用方法,Search Widget的使用方法讀者能夠在http://developer.android.com/guide/topics/search/index.html中學習,有什麼問題也能夠跟我討論。ide
要使用Search Dialog,咱們須要準備一下三個東西:學習
根據以上三點,咱們開始編寫一個簡單的包含搜索功能的Appui
searchable.xml文件內容以下,並將其放入工程的res/xml下面this
<?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>
app_label通常指定App的名字,使用簡單的搜索功能時app_label是不可見的,只有將你的搜索功能加入到quick search box的時候,纔會在quick search box的可搜索列表中出現。spa
search_hint就是當咱們沒有任何輸入是出如今Search Dialog上的字符串
假設咱們建立的Activity的名稱爲SearchableActivity,那麼在AndroidManifest中的配置以下:
<application ... > <activity android:name=".SearchableActivity" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> ... </application>
其中android:name="android.app.searchable"告訴Android系統,SearchableActivity這個界面對android.intent.action.SEARCH敏感。
android:resource="@xml/searchable"則是來指定咱們在第一步中的配置文件。
上面咱們只定義了一個處理搜索關鍵字的界面,接下來咱們還要定義一個調用搜索接口的界面:
這裏爲了簡單期間,我只是在App的第一個界面MainActiviy中添加一個按鈕,而後經過按鈕來調用Search Dialog的搜索接口。
MainActiviy.onCreate
private Button button ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button) ; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onSearchRequested() ; //Search Dialog的調用接口 } }); }
MainActiviy對應的AndroidManifest配置
<activity android:name=".MainActivity" android:label="@string/app_name" > <meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
其中
<meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" />指定了MainActivity調用Search Dialog的權利,而且指定了搜索處理界面SearchableActivity。
這裏當點擊MainActivity上的button的時候,就會調用onSearchRequested(),來激活Search Dialog。接着當我在Search Dialog中輸入一些關鍵字並按肯定時,系統會替咱們發送一個包含了搜索關鍵字的Intent來啓動SearchableActivity這個界面。因此只要在SearchableActivity的onCreate方法中獲取intent,接着獲取搜索關鍵字,就能對其進行處理了。
SearchableActivity.onCreate
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent() ; if(Intent.ACTION_SEARCH.equals(intent.getAction())){ String query = intent.getStringExtra(SearchManager.QUERY) ; //獲取用戶輸入的關鍵字 Toast.makeText(this,"the query key is " + query,Toast.LENGTH_LONG).show(); //彈出用戶輸入的關鍵字,模擬搜索處理 } }
完成以上三步後,一個簡單的搜索Demo就作好了。效果圖以下:
MainActivity進行搜索
SearchableActivity處理關鍵字