Android - ToolBar searchView 實現搜索框

在ToolBar上可以很方便的用widget.SearchView實現搜索功能。
一般情況下,SearchView通常有兩種實現方案:

  • 在當前Activity處理搜索邏輯

  1. 首先在menu中新增item
    <item
        android:id="@+id/toolbar_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"/>
    
  2. onCreateOptionsMenu中增加如下代碼:
        public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.tool_bar,menu);
        //Toolbar的搜索框
        MenuItem searchItem = menu.findItem(R.id.toolbar_search);
        SearchView searchView = null;
        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                //處理搜索結果    
                Toast.makeText(MainActivity.this,"搜索: " + query,Toast.LENGTH_LONG).show();
                return false;
            }
            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });
        return  true;
    }
    
  • 在新Activity處理搜索邏輯

  1. 在menu中新增item(同上)

  2. 在onCreateOptionsMenu中增加如下代碼:

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.dashboard, menu);
    
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = null;
        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
        }
        return super.onCreateOptionsMenu(menu);
    }
    
  3. 在res/xml/下新建searchable.xml文件,內容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/app_name" />
    
  4. 新建處理搜索結果的activity:SearchResultsActivity

  5. AndroidManifest文件添加下面的代碼:

    <activity
        android:name="com.example.SearchResultsActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
        </intent-filter>
    
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
    
  6. 在SearchResultsActivity裏面處理搜索結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章