提到使用Search Interface 去搜尋我們要的資料, 可搜尋的範圍是根據我們程式提供多少資料來源, 例如我們去查詢的資料來源為手機中的通訊錄, 簡訊夾, 或是一些應用程式, 大部分的資料來源都是從ContentProvider取得的, 而根據使用者的需要甚至可以擴大到當做翻譯字典甚至網路搜尋引擎, 不過包含的內容越多程式就越複雜, 那Android有提供方法讓我們不用在我們的App中撰寫複雜的程式碼卻也可以達到同樣搜尋的功效嗎?
很開心的是 Android的確有提供這樣的辦法協助開發人員輕鬆的使用這些搜尋功能, 它就是Global Search, 接下來看看一個簡單的使用範例。
package COM.TQC.GDD03;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class GDD03 extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);
//在鍵盤上打字時會自動的啟動Search UI, 並且預設為Global Search
}
@Override
public boolean onSearchRequested()
{
// TODO Auto-generated method stub
Log.d("Test","onSearchRequested()");
startSearch("請輸入聯絡人姓名", false, null, true);
/* 第四個參數代表是否啟用Global Search 功能, 在這個範例我們選擇 true
* 如果要使用自定義的Local Search的話就代入 false
*/
return true;
}
}
另外使用Global Search的功能是不用像Local Search那樣還需要額外的定義一個 searchable.xml , 也不用在AndroidManifest.xml中去額外的幫Activity定義 Search Action 和 searchable 的resource, 但是我們仍然能使用SEARCH BUTTON呼叫 Search UI, 也能夠讓
onSearchRequested() Method 起作用, 這都是因為Global Search 的關係, 另外有一個值得一提的地方是使用鍵盤輸入會喚起Search UI, 但是從Log訊息中可以發現這個動作是不會去call onSearchRequested() method 的(無論是Global Search or Local Search), 所以就算拿掉 override onSearchRequested() method的部分, 仍然可以靠 setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL)呼叫 Search UI 成功的完成Global search的動作。


沒有留言:
張貼留言