Android搜索控件的基本使用方法

在Android中,搜索是一個很是核心的功能,咱們能夠經過它搜索到任意咱們能夠得到的信息。這些信息能夠是存儲在手機中的聯繫人、文件等信息,也能夠是在網絡上的資源。html

Android爲了給用戶提供良好的搜索體驗,特地提供了一個搜索框架來方便開發者在本身的App中集成搜索功能。那麼接下來我就學習一下這個搜索框架。android

 

在Android的搜索框架中爲咱們提供了兩種搜索的UI控件,它們分別是:網絡

  • Search Dialog

Search Dialog就是浮動在Activity上方的,由系統管理的搜索控件。它不參與Activity的生命週期。app

  • Search Widget

Search Wiget這是一個相似於EditView的控件,你能夠將它隨意擺放在任意你須要的位置。框架

這裏咱們主要學習Search Dialog的使用方法,Search Widget的使用方法讀者能夠在http://developer.android.com/guide/topics/search/index.html中學習,有什麼問題也能夠跟我討論。ide

 

要使用Search Dialog,咱們須要準備一下三個東西:學習

  1. A searchable configuration  這是一個xml的配置文件searchable.xml,並將其放在res/xml下
  2. A searchable activity 這是一個Activity,做用是用來處理用戶輸入的搜索關鍵字
  3. A search interface 這是一個搜索控件提供的接口,對於Search Dialog它提供的接口是onSearchRequested

根據以上三點,咱們開始編寫一個簡單的包含搜索功能的Appui

 

1.編寫searchable configuration

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上的字符串

 

2.建立一個Searchable Activity

假設咱們建立的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"則是來指定咱們在第一步中的配置文件。

 

3.調用搜索接口並處理用戶輸入

上面咱們只定義了一個處理搜索關鍵字的界面,接下來咱們還要定義一個調用搜索接口的界面:

這裏爲了簡單期間,我只是在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處理關鍵字

源碼下載http://pan.baidu.com/s/1o6DTcs6

相關文章
相關標籤/搜索