Android開發之核心特性SearchView的開發使用(原始碼分享)

來源:互聯網
上載者:User

標籤:android   widget   dialog   search   架構   

      在Android上,搜尋是一個核心使用者特性。使用者可以搜尋可用的任何資料,不管內容是存促於裝置本身或者需要通過網路訪問。Android提供了一個搜尋方塊架為使用者建立一個一致的搜尋體驗,可以協助你實現搜尋應用程式。搜尋方塊架提供兩種搜尋模式:一個搜尋對話方塊(Search Dialog)位於搜尋螢幕的頂部或視窗小組件(SearchView),可以將其嵌入到你的布局中。在這兩種情況下,Android系統將協助你搜尋實現交付執行搜尋的任務給一個特定的Activity。效果如所示。

       當使用者需要執行一個搜尋的搜尋對話方塊或搜尋小組件,系統建立一個Intent和儲存使用者Query,然後系統會啟動你事先聲明的用於執行資料尋找的Activity,,使用它進行資料搜尋。總共需要以下三個步驟。

(1)建立一個Search.XML檔案在res/xml檔案中

     一個XML檔案,配置一些search dialog或widget的設定。它包括設定特性,比如語音搜尋,搜尋建議和提示文本搜尋方塊。

<?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>

 (2)聲明一個SearchActivity

          這個Activiy接收搜尋使用者的資料,並顯示搜尋結果。特別注意的是為了使調用的Activity找到這個SearchActivity,你必須首先聲明Android搜尋Activitydao到你的資訊清單檔。如下所示。

<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>

  SearchActivity要完成以下三個步驟。1 接收查詢 2 搜尋您的資料3 展示結果。

@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.search);    handleIntent(getIntent());}@Overrideprotected 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);    }}

     之前看部落格又看到有人說onNewIntent()不知道幾時促發的,我研究了下官方文檔上面是這麼寫的。如果我們將android:launchMode設定為“singleTop”,然後SerachActivity接收ACTION_SEARCH intent 會調用 onNewIntent()方法。

(3)建立一個搜尋介面

   搜尋介面包含兩種類型SearchDialog和SearchWidget。SerachDialog:預設情況下,搜尋對話方塊隱藏,我們通過調用onSearchRequested()(當使用者按搜尋按鈕)讓他顯示在螢幕上端,SearchWidget :允許使用者將搜尋方塊放在布局的任意位置,但通常需要跟actionbar結合。

  搜尋介面的Activity也需要在資訊清單檔聲明

  <activity android:name=".OtherActivity" ... >        <!-- enable the search dialog to send searches to SearchableActivity -->        <meta-data android:name="android.app.default_searchable"                   android:value=".SearchableActivity" />    </activity>

    public class OtherActivity extends Activity{          private Button mStartSearch;          @Override          protected void onCreate(Bundle savedInstanceState) {              super.onCreate(savedInstanceState);              setContentView(R.layout.search_invoke);              //就一個按鈕              mStartSearch = (Button)findViewById(R.id.btn_start_search);              //啟動搜尋方塊              mStartSearch.setOnClickListener(new OnClickListener() {                  @Override                  public void onClick(View v) {                      onSearchRequested();                  }              });          }                    //重寫onSearchRequested方法          @Override          public boolean onSearchRequested() {                     //除了輸入查詢的值,還可額外綁定一些資料              Bundle appSearchData = new Bundle();              appSearchData.putString("demo_key","text");                            startSearch(null, false, appSearchData, false);                       //必須返回true。否則繫結資料作廢              return true;          }               }  


Android開發之核心特性SearchView的開發使用(原始碼分享)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.