Material 風格的搜索框MaterialSearchView的使用


大多數App中都有搜索的功能,雖然國內實實在在的遵循Google material design設計語言來設計的App實在不多,但個人感覺MD真的是非常值得研究,這次給大家介紹的是 Material 風格的搜索框MaterialSearchView。

MaterialSearchView Github地址:https://github.com/MiguelCatalan/MaterialSearchView ,強烈建議大家學習學習,雖然只是簡單的使用,但是還是整理了一下畫了個簡單的思維導圖。

自己也寫了下簡單的Demo,下面主要就是圍繞怎么實現下面效果記錄

1:在module的gradle中添加依賴

1 compile 'com.miguelcatalan:materialsearchview:1.4.0'

2:將MaterialSearchView與Toolbar一起添加到布局文件中

 1     <FrameLayout
 2         android:id="@+id/toolbar_container"
 3         android:layout_width="match_parent"
 4         android:layout_height="wrap_content">
 5 
 6         <android.support.v7.widget.Toolbar
 7             android:id="@+id/toolbar"
 8             android:layout_width="match_parent"
 9             android:layout_height="?attr/actionBarSize"
10             android:background="@color/theme_primary" />
11 
12         <com.miguelcatalan.materialsearchview.MaterialSearchView
13             android:id="@+id/search_view"
14             android:layout_width="match_parent"
15             android:layout_height="wrap_content" />
16     </FrameLayout>

3:在menu文件夾下新建菜單文件,將搜索項添加到菜單文件中

1     <item
2         android:id="@+id/action_search"
3         android:icon="@drawable/ic_action_action_search"
4         android:orderInCategory="100"
5         android:title="@string/abc_search_hint"
6         app:showAsAction="always" />

4:在Activity的onCreateOptionsMenu中定義菜單

1 @Override
2     public boolean onCreateOptionsMenu(Menu menu) {
3         getMenuInflater().inflate(R.menu.menu_main, menu);
4 
5         MenuItem item = menu.findItem(R.id.action_search);
6         searchView.setMenuItem(item);
7 
8         return true;
9     }

5:設置監聽,編輯過濾條件

 1 searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
 2             @Override
 3             public boolean onQueryTextSubmit(String query) {
 4                 //Do some magic
 5                 return false;
 6             }
 7 
 8             @Override
 9             public boolean onQueryTextChange(String newText) {
10                 filter(newText);
11                 return true;
12             }
13         });
14         
15         searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
16             @Override
17             public void onSearchViewShown() {
18                 //Do some magic
19             }
20 
21             @Override
22             public void onSearchViewClosed() {
23                 //Do some magic
24             }
25         });

6:設置back按鈕來關閉搜索視圖

1     @Override
2     public void onBackPressed() {
3         if (searchView.isSearchOpen()) {
4             searchView.closeSearch();
5         } else {
6             super.onBackPressed();
7         }
8     }

MaterialSearchView的使用步驟如上,咱們看看第五點的過濾條件的代碼

 1  private void filter(String query) {
 2         try {
 3             List<Person> filterDateList = new ArrayList<Person>();
 4             //當輸入框的內容為空時顯示全部列表
 5             if (TextUtils.isEmpty(query)) {
 6                 filterDateList = datas;
 7             } else {
 8                 //清空
 9                 filterDateList.clear();
10                 //遍歷列表
11                 for (Person person : datas) {
12                     if (person.getName().contains(query.toString())
13                             || person.getCareer().contains(query.toString())
14                             ) {
15                         filterDateList.add(person);
16                     }
17                 }
18             }
19             adapter.update(filterDateList);
20         } catch (Exception e) {
21             e.printStackTrace();
22         }
23     }

我們在RecycleView 的適配器Adapter中添加了一個方法Update.

1     public void update(List<Person> list) {
2         this.datas = list;
3         notifyDataSetChanged();
4     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM