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


在Android中,搜索是一個非常核心的功能,我們可以通過它搜索到任意我們可以獲得的信息。這些信息可以是存儲在手機中的聯系人、文件等信息,也可以是在網絡上的資源。

Android為了給用戶提供良好的搜索體驗,特意提供了一個搜索框架來方便開發者在自己的App中集成搜索功能。那么接下來我就學習一下這個搜索框架。

 

在Android的搜索框架中為我們提供了兩種搜索的UI控件,它們分別是:

  • Search Dialog

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

  • Search Widget

Search Wiget這是一個類似於EditView的控件,你可以將它隨意擺放在任意你需要的位置。

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

 

要使用Search Dialog,我們需要准備一下三個東西:

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

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

 

1.編寫searchable configuration

searchable.xml文件內容如下,並將其放入工程的res/xml下面

<?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的可搜索列表中出現。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM