本節書摘來自異步社群《android平闆電腦開發秘籍》一書中的第3章,第3.6節技巧:在actionbar中顯示action view,作者 【印度】b.m. harwani,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
3.6 技巧:在actionbar中顯示action view
android平闆電腦開發秘籍
為了更便捷地執行action,action view提供了内嵌的控件。從本質上說,action view允許在actionbar内放入一個自定義view。android應用程式最常用的action view就是searchview。searchview提供了一個使用者界面,以便輸入搜尋請求并送出給搜尋provider。如果存在可用的建議項或者結果項,它還能把它們列出來,以便使用者能夠從中選擇。為了能偵測到searchview中發生的事件,将setonquerytextlistener設為偵聽器(listener),以便在使用者輸入或改變文本時做出響應。onquerytextlistener中需要實作兩個方法:onquerytextchange和onquerytextsubmit。一旦使用者改變了搜尋文本,onquerytextchange方法就會被調用。onquerytextsubmit則會在使用者輸入回車或按下搜尋按鈕時被調用。
為了了解android應用程式中action view的使用,請建立一個名為actionviewapp的android項目。在此應用程式中,将把searchview作為action view顯示,使用者可以在其中輸入要搜尋的文本。要顯示searchview,請把代碼清單3-4給出的代碼寫入菜單檔案activity_action_view_app.xml,此檔案位于res/menu檔案夾中。
代碼清單3-4 寫入菜單檔案activity_action_view_app.xml的代碼
通過這段代碼,searchview将會顯示為一個圖示,如圖3-4上所示。通過把android:showasaction屬性做如下設定,還可以讓searchview顯示成一個action項。
android:showasaction="ifroom|collapseactionview"
還記得吧,collapseactionview使得與action項關聯的action view可折疊顯示,也就是說,它能讓action view折疊成一個正常action項顯示。現在,searchview将會顯示為一個action項,如圖3-4中所示。不管用圖示還是action項方式,在點選searchview之後,将會打開一個搜尋框,使用者可以在其中輸入需要搜尋的文字(見圖3-4下)。

圖3-4 以圖示方式顯示的searchview(上),以action項方式顯示的
searchview(中),點選searchview後出現的搜尋框(下)
為了了解事件偵聽器setonquerytextlistener是如何工作的,将把使用者在搜尋框中輸入或修改的文字顯示在日志資訊欄(log message)中。還會把搜尋框中最終錄入的文本顯示出來。要實作這些任務,請把代碼清單3-5給出的代碼寫入java activity檔案 actionview appactivity.java。
代碼清單3-5 寫入java activity 檔案actionviewappactivity.java的代碼
可以看到,這裡從菜單檔案中擷取了id為action_search 的searchview widget,并賦給了searchview對象searchview。把setonquerytextlistener與searchview對象searchview關聯起來,這樣使用者在搜尋框中輸入或送出文本時,将會采取必要的處理。一旦使用者在搜尋框中輸入或修改文本,onquerytextchange()方法就會被調用。在onquerytextchange()方法中,将把搜尋框中修改過的文本以日志的方式顯示出來。當使用者按下回車或搜尋按鈕完成輸入後,将會調用onquerytextsubmit()方法,将把搜尋框中錄入的完整文本通過日志資訊顯示出來。
運作此應用程式後,将看到以圖示方式顯示在actionbar中的searchview(見圖3-5上)。當使用者按下actionbar 中的searchview時,将會出現一個搜尋框,提示需要搜尋的文本(見圖3-5中)。搜尋框中的完整文本将顯示在日志資訊頁中,見圖3-5下。
圖3-5 應用程式啟動時顯示的searchview(上),點選searchview之後出現搜尋
框以輸入文字(中),顯示搜尋框中的文字如何被錄入或修改的日志資訊(下)