編輯:關於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,用於提示用戶需要輸入的信息。
接下來,需要把這個配置文件放到你的應用程序中。
當用戶從一個搜索框執行搜索時,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的語音搜索:
只需要對我們的搜索配置文件做如下改動,你的搜索就支持語音搜索了,配置文件
一、Fragment介紹fragment在3.0被引入以後,項目使用fragment越來越多,特別是主界面是底部tab頁點擊切換更換內容,當然啦, Fragment 在項
蘑菇ROM助手可以對system.img文件進行合並或分割,下面就讓我給大家講講如何操作。一、操作前准備1、下載安裝ROM助手2、准備好刷機包二、打開ROM
前面照著android系統的裁剪圖片的功能自己寫了一個相似的工具。功能是大體上實現了,但留下了一個調用的問題:如何從我的程序調用這個裁剪工具,並且獲得裁剪後的圖片呢?其實
如果你是小米手機或小米MIUI系統的用戶,充值話費可以很簡單,你知道嗎?還在打開電腦、登陸淘寶,搜索充值話費的店嗎?看看小米MIUI系統是怎麼在撥號界面輕松