Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中實現內容搜索

android中實現內容搜索

編輯:關於Android編程

在編寫android搜索代碼的時候,如何去實現搜索功能,考慮中的有兩種:

自定義搜索方法:

1.自定義搜索輸入框,搜索圖標,搜索按鈕

2.自定義語音輸入方法

3.自定義常用熱詞內容、樣式

4.自定義浏覽記錄內容和樣式

5.自定義彈出樣式使用spinner配合listView

6.自定義數據源格式和搜索算法

自定義搜索相比還是比較復雜,需要我們思考比較多。

Android自帶的搜索方法:

1.創建一個搜索對話框配置文件

2.創建一個可用於搜索的Acitivity和執行搜索

3.接受搜索查詢並調用搜索對話框

省去了自定義算法的彈出樣式,搜索數據源格式和算法兩大塊。

Android搜索方法優點:

1、當您需要在您的應用程序中提供搜索服務時,您第一個想到的是您的搜索框要放在哪裡?通過使用Android的搜索對話框來處理用戶的搜索請求。通過一個簡單的搜索按鈕或從您的應用程序中調用API,搜索對話框就會顯示在屏幕的頂部,並會自動顯示您的應用程序圖標。


本文章實現應用程序提供一個自定義的搜索對話框,提供一個標准化的搜索體驗,並增加如語音搜索和搜索建議等功能。

Android的搜索框架將代您管理搜索對話框,您不需要自己去開發一個搜索框,不需要擔心搜索框放在什麼位置,也不需要擔心搜索框影響您當前界面。所有的這些工作都有SearchManager類來處理,SearchManager管理Android搜索對話框的整個生命周期,在您的應用程序發送搜索請求後,返回相應的搜索關鍵字。

當用戶執行一個搜素,SearchManager將使用一個專門的Intent把搜索查詢的關鍵字傳送給您在配置文件中配置的處理搜索結果的Activity。從本質上講,所有你需要准備的就是一個Activity來接收Intent,然後執行搜索,並給出結果,具體來說,您需要做的事情包括:

(1)一個搜索配置,用一個XML配置文件來對搜索對話框進行配置,包括一些功能的配置,如文本框,設置語音搜索和搜索建議中顯示的提示文字等。(searchable.xml)

(2)一個用來處理搜索請求的Activity,這個Activity用來接收搜索查詢的內容,然後搜索您的數據並顯示搜索結果。

(3)一個用戶執行的搜索路徑,默認情況下,一旦您配置了一個可搜索的Activity,設備搜索鍵(如果存在)將調用搜索對話框。然後,你應該使用提供另一種手段,讓用戶可以調用搜索對話框,如在選項菜單中的搜索按鈕和其他用戶界面的按鈕,因為不是所有設備都提供一個專門的搜索鍵。


一、搜索配置

搜索框配置文件是一個用來配置應用程序的XML文件,這個文件一般命名為searchable.xml,並且必須保存在項目的res/xml/目錄下。配置文件的根節點必須為searchable,可以有一個或多個屬性。



上面的配置文件中,除了android:hint屬性外,其他都是一個搜索對話框必須的配置項,android:label是一個必須的屬性,它的值為一個string資源引用,不能直接用字符串,通常回事應用程序的名稱(盡管它是一個必須屬性,但通常情況下是不顯示出來的,除非你開啟了搜索建議功能)。android:hint是配置搜索框的輸入提示信息,也必須引用string.xml中的配置的字符串資源,不能直接使用字符串。可以配置很多的屬性,但大部分屬性都只是使用搜索建議和語音搜索時進行配置,盡管如此盡量配置android:hint,用於提示用戶需要輸入的信息。

接下來,需要把這個配置文件放到你的應用程序中。

二、創建一個可用於搜索的Activity

當用戶從一個搜索框執行搜索時,SearchManager會通過ACTION_SEARCH Intent把要搜索的內容(關鍵字)發送到一個可執行搜索的Activity。這個Activity查詢數據並顯示結果。創建一個用來執行搜索的Activity,聲明它可以響應ACTION_SEARCH Intent,並且增加搜索框配置信息,為此需要添加一個元素和一個元素在你的manifest文件中的節點。如下所示:

    
        
    
    

代碼中android:name屬性值必須為“android.app.searchable",android:resource屬性值必須引用上面提到的res/xml/目錄下的搜索配置文件(本文中為res/xml/searchable.xml)。

請注意,只有配置了上面的meta-data節點的Activity的節點才能執行搜索,如果想在整個應用程序中都可以調用搜索框,可進行如下配置:

    
        
    
    

上面代碼中andorid:name="android.app.default_searchable"定義一個響應搜索框搜索請求的名稱,android:value制定是由哪個Activity響應並執行搜索。當我們在應用程序中的OtherActivity中執行搜索請求時,SearchActivity將會被加載用於執行搜索並顯示搜索結果。

當一個Activity聲明為可搜索時,執行實際的搜索包括三個步驟:接受查詢,檢索你的數據,並提交結果。通常情況下,你的搜索結果需要在一個listView中展現,所以擬用於執行的Activity要繼承ListActivity,這樣可以方面的訪問ListView的API。

當從搜索對話框執行搜索時,剛才配置的可用於搜索的Activity將會被Intent激活,同時帶著一些搜索相關的參數,你需要檢查Intent並做出搜索響應,如下所示:

Intent intent= getIntent();
//判斷是否是搜索請求
if (Intent.ACTION_SEARCH.equals(intent.getAction())){
	//獲取搜索的查詢內容(關鍵字)
	String query = intent.getStringExtra(SearchManager.QUERY);
	//執行相應的查詢動作
	doMySearch(query);
}

doMySearch()方法將根據關鍵字查詢數據庫或從網絡上查詢數據信息,如果是耗時的搜索,你還需要使用搜索進度條,來告訴用戶搜索正在進行,最後返回結果後,可以調用ListView的setAdapter()方法將結果顯示在ListView中。

你可以從應用程序中的任何一個地方調用onSearchRequested()方法激活搜索框,比如從菜單中或者一個按鈕等。你也可以在OnCreate()方法中調用。setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL),這樣,當用戶按下鍵盤上的按鍵時,將會自動激活搜索框。

搜索框和普通對話框一樣,浮動在屏幕的最上方,他不會改變Acitivity堆棧狀態,沒有任何Activity生命周期中的方法會被調用,只有當搜索框出現的時候,正在運行的Activity會失去輸入焦點。

如果你要執行搜索時,進行別的操作,可以重寫OnSearchRequested()方法,如下所示

@Override
    public boolean onSearchRequested(){
    	//這個方法中干你想干的事,比如做一些被始化工作
        pauseSomeStuff();
        return super.onSearchRequested();
    }

如果當前的Activity就是相應搜索請求的Activity時,會有以下兩種情況:

默認情況下,ACTION_SEARCH Intent將會創建一個新的Activity,並調用OnCreate()方法,這個新的Activity會顯示在最前面,你將同時有兩個Activity實例。當你按下”返回“鍵時,會回到沒有執行搜索前的Activity。

另一種情況是配置了android:launchMode="singleTop"的Activity,這時,我們需要在onNewIntent(Intent)方法中處理搜索請求,如下所示:

代碼

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);
    handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent){
    setIntent(intent);
    handleIntent(intent);
}
private void handleIntent(Intent intent){
    if (Intent.ACTION_SEARCH.equals(intent.getAction())){
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
}

相應的Activity配置如下

  

	

要給搜索框傳遞參數,我們需要重寫onSearchRequested()方法,如下所示:

@Override
public boolean onSearchRequested(){
     Bundle appData= new Bundle();
     appData.putBoolean(MySearchableActivity.JARGON,true);
     startSearch(null,false, appData,false);
     return true;
}

最後我們來看看如何使用android的語音搜索:

只需要對我們的搜索配置文件做如下改動,你的搜索就支持語音搜索了,配置文件








  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved