MaterialSearchView一个Material Design的搜索控件。

MaterialSearchView

Cute library to implement SearchView in a Material Design Approach

http://miguelcatalan.info/2015/09/23/MaterialSearchView/

介绍:

一个Material Design的搜索控件。

运行效果:

使用说明:

 

gradle文件中添加依赖:

1
2
3
dependencies {
     compile  'com.miguelcatalan:materialsearchview:1.0.1'
}

MaterialSearchView和Toolbar一起添加到布局文件(把这部分放在布局的地步,以便将其显示在其它view之上):

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

 search item添加到menu文件中:

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

onCreateOptionsMenu定义它:

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

设置 listeners:

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

使用语音搜索

启用与禁用:

1
searchView.setVoiceSearch( true );  //or false

处理响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if  (requestCode == MaterialSearchView.REQUEST_VOICE && resultCode == RESULT_OK) {
         ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
         if  (matches !=  null  && matches.size() > 0) {
             String searchWrd = matches.get(0);
             if  (!TextUtils.isEmpty(searchWrd)) {
                 searchView.setQuery(searchWrd,  false );
             }
         }
 
         return ;
     }
     super .onActivityResult(requestCode, resultCode, data);
}

添加提示

在资源文件中以string-array的形式添加:

1
2
3
4
5
6
7
<string-array name= "query_suggestions" >
     <item>Android</item>
     <item>iOS</item>
     <item>SCALA</item>
     <item>Ruby</item>
     <item>JavaScript</item>
</string-array>

把它们添加到对象

1
searchView.setSuggestions(getResources().getStringArray(R.array.query_suggestions));

样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<style name= "MaterialSearchViewStyle" >
     <!— Background  for  the search bar—>
     <item name= "searchBackground" >@color/theme_primary</item>
 
     <!— Change voice icon—>
     <item name= "searchVoiceIcon" >@drawable/ic_action_voice_search_inverted</item>
 
     <!— Change clear text icon—>
     <item name= "searchCloseIcon" >@drawable/ic_action_navigation_close_inverted</item>
 
     <!— Change up icon—>
     <item name= "searchBackIcon" >@drawable/ic_action_navigation_arrow_back_inverted</item>
 
     <!— Change background  for  the suggestions list view—>
     <item name= "searchSuggestionBackground" >@android:color/white</item>
 
     <!— Change text color  for  edit text. This will also be the color of the cursor—>
     <item name= "android:textColor" >@color/theme_primary_text_inverted</item>
 
     <!— Change hint text color  for  edit text—>
     <item name= "android:textColorHint" >@color/theme_secondary_text_inverted</item>
 
     <!— Hint  for  edit text—>
     <item name= "android:hint" >@string/search_hint</item>
</style>

Custom cursor

创建 drawable:

1
2
3
4
<shape xmlns:android= "http://schemas.android.com/apk/res/android" >
     <size android:width= "2dp"  />
     <solid android:color= "@color/theme_primary"  />
</shape>

并添加到对象:

1
searchView.setCursorDrawable(R.drawable.custom_cursor);

Bonus

返回(on backpressed)的时候关闭:

1
2
3
4
5
6
7
8
@Override
public void onBackPressed() {
     if  (searchView.isSearchOpen()) {
         searchView.closeSearch();
     else  {
         super .onBackPressed();
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为你提供一个满足material design设计风格的文件上传控件,它可以帮助你在网页上快速、便捷地上传文件。它具有简洁明了的界面,支持本地文件上传,也可以从网络上轻松访问文件。同时,它也允许用户对上传文件进行预览、编辑和分享等操作。 ### 回答2: Material Design是一种由Google提出的设计语言,旨在提供一种直观和一致的用户体验。为了满足Material Design的设计风格,我们可以创建一个简洁而具有现代感的文件上传控件。 首先,该控件应具有明确的界面元素,包括一个上传图标、一个提示文字和一个选择文件按钮。上传图标应该是一个符合Material Design的图标,比如一个云朵形状的图标,以表示文件上传的概念。提示文字应该清晰地指示用户应该点击哪里进行文件上传操作。选择文件按钮则应被设计成一个点击区域较大且有明显反馈的按钮,以确保用户体验。 在用户点击选择文件按钮后,控件应该呈现一个方便用户进行文件选择的界面。这个界面应该有一个文件浏览器的图标和一个文字,提示用户选择一个或多个文件。此外,为了符合Material Design的概念,我们可以使用一些动画效果来增强用户体验,比如按钮点击后有一个微妙的涟漪效果。 在用户成功选择文件后,控件应当显示一个符合Material Design的反馈,比如一个勾号图标和一个“文件已上传”的文字。这一部分可以用一个动画来突出显示,以增加用户的交互感。 最后,在用户上传文件的过程中,控件应该提供一个进度条或者一个加载动画,来显示上传进度和给用户一个可见的反馈。这将有助于用户了解文件上传的进程以及剩余时间,以便更好地控制和计划他们的操作。 总的来说,一个满足Material Design设计风格的文件上传控件应该注重界面元素的明确性和可交互性,使用合适的图标和动画来增强用户体验,并提供明确的反馈和进度展示来帮助用户了解上传过程。 ### 回答3: 满足Material Design设计风格的文件上传控件应该具有以下几个特点: 1. 界面设计:控件整体界面应简洁清晰,采用扁平化设计风格,使用明亮的色彩和简洁的图标。上传按钮应该有明显的矩形边框,并使用Material Design中的浮动按钮的样式。 2. 文件选择:用户点击上传按钮后,应弹出文件选择对话框。在选择文件时,对话框应该采用卡片的形式展示文件信息,每个文件卡片上应包含文件名、文件大小和文件类型等信息,并使用Material Design中的阴影效果进行修饰。 3. 进度展示:在文件上传过程中,应该有一个水平进度条显示上传进度。进度条应采用Material Design中的波纹效果,并在顶部显示上传进度的百分比。 4. 上传结果:在文件上传完成后,需要给用户一个明显的反馈。可以在界面上显示一个提示消息,告知用户文件上传成功,并显示文件的上传路径或者下载链接。 5. 错误处理:当文件上传过程中出现错误时,应该给用户适当的提示。可以使用红色的错误信息提示框,提示用户上传失败的原因,并提供重新上传按钮。 6. 用户体验:控件应该具有良好的用户体验,能够适应不同尺寸的屏幕和设备。在移动设备上,可以使用折叠面板的形式来展示文件选择对话框,以节约空间。 综上所述,满足Material Design设计风格的文件上传控件应具备上述特点,通过简洁明快的界面设计、明确的用户反馈和良好的用户体验,能够提供便捷的文件上传功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值