Material Design 控件使用大全 一

自从谷歌在2014年的IO大会上推出了Material Design新的设计规范后,安卓应用的整体美观程度提升了很大的一个层次, 安卓再也不是又黑又丑的界面,取而代之的是拥有丰富的颜色,美观的按钮,好的用户体验;但是刚开始的话这种设计规范只能在Android 5.0以上的手机上运行,导致开发者也只是自己去体验,在国内并没有大范围的推广,App的质量并不能大幅度的提升,但是作为改变世界的Google公司不久就推出了兼容库Android Material Design,这绝对是业界良心了,我们也看到了越来越多的App开始使用这个兼容库,来提升UI效果及用户体验,由于之前只是偶尔体验了一下,并没有认真的去了解使用,导致对这个库的使用懵懵懂懂,现在写下这个总结,也算是对自己的一个交代,也算是对知识的一个总结,如果能帮到其他人,让别人少走弯路,那就更好了;

我们先看一下印象笔记的截图,有个大致的了解

 


 

如何使用

这个兼容库如果使用的话只需要将其添加到项目依赖中即可:

compile ‘com.android.support:design:23.2.1’

这样的话,Android Studio 就会自动去同步这个库,然后我们就可以愉快的使用了,相信一些老司机用这个简直太简单;

1 侧滑NavigationView

在Materil Design中,NavigationView作为一个抽屉导航来实现app内部的交互,让实现更简单,同时还能直接通过菜单资源元素直接生成导航元素;

它的一般用法是需要配合之前v4包中的DrawLayout,并作为其中的Darwer部分,也就是划出的导航部分,它提供了可选的Header,默认样式,选中项高亮,分组单选,分组子标题等,如图示,左侧即为NavigationView

我们现在来看一下是怎么用的,外层是一个DrawerLayout,第一个child将作为主页content,第二个child则作为Drawer侧拉面板:

[javascript]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <android.support.v4.widget.DrawerLayout  
  3.     android:id="@+id/drawer_laout"  
  4.     xmlns:android="http://schemas.android.com/apk/res/android"  
  5.     xmlns:tools="http://schemas.android.com/tools"  
  6.     android:layout_width="match_parent"  
  7.     android:layout_height="match_parent"  
  8.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  9.     tools:context=".NavigationViewActivity">  
  10.   
  11. <LinearLayout  
  12.     android:orientation="vertical"  
  13.     android:layout_width="wrap_content"  
  14.     android:layout_height="wrap_content">  
  15.     <include layout="@layout/toolbar_actionbar"/>  
  16.     <TextView  
  17.         android:layout_gravity="center"  
  18.         android:layout_marginTop="100dp"  
  19.         android:textSize="25sp"  
  20.         android:layout_width="wrap_content"  
  21.         android:layout_height="wrap_content"  
  22.         android:text="This is home content"/>  
  23. </LinearLayout>  
  24.     <android.support.design.widget.NavigationView  
  25.         android:id="@+id/navi_all"  
  26.         android:layout_width="wrap_content"  
  27.         android:layout_height="match_parent"  
  28.         android:layout_gravity="start"  
  29.         app:headerLayout="@layout/head_layout"  
  30.         app:menu="@menu/navigation_menu">  
  31.   
  32.     </android.support.design.widget.NavigationView>  
  33. </android.support.v4.widget.DrawerLayout>  

注意: 我们看到NavigationView有两个属性,`app:headerLayout`接受的是一个layout文件,作为导航页的头布局,可选项;`app:menu`接受一个menu,作为导航栏的菜单页,这个是必选项; headerLayout为一个普通的layout文件,我们就不在赘述,我们现在来看一下menu文件怎么写,在`res`目录下新建一个`menu`文件夹,然后新建xml文件:
[javascript]  view plain  copy
  1. <pre class="java" name="code"><?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <group android:checkableBehavior="single">  
  4.         <item  
  5.             android:id="@+id/navi_home"  
  6.             android:icon="@mipmap/home"  
  7.             android:checked="true"  
  8.             android:title="首页" />  
  9.         <item  
  10.             android:id="@+id/navi_notify"  
  11.             android:icon="@mipmap/notify"  
  12.             android:title="通知" >  
  13.         </item>  
  14.         <item  
  15.             android:id="@+id/navi_blog"  
  16.             android:icon="@mipmap/blog"  
  17.             android:title="我的博客" />  
  18.     </group>  
  19. </menu></pre>  
  20. <br>  
  21. <br>  

注意:其中checked=”true”的item将会高亮显示,这可以让用户知道当前选中的菜单项是哪个。当然,item的选中状态可以在代码中设置;

使用subheader来为菜单分组:

[java]  view plain  copy
  1. <item  
  2.     android:id="@+id/navigation_subheader"  
  3.     android:title="@string/navigation_subheader">  
  4.     <menu>  
  5.         <item  
  6.             android:id="@+id/navigation_sub_item_1"  
  7.             android:icon="@drawable/ic_android"  
  8.             android:title="@string/navigation_sub_item_1"/>  
  9.         <item  
  10.             android:id="@+id/navigation_sub_item_2"  
  11.             android:icon="@drawable/ic_android"  
  12.             android:title="@string/navigation_sub_item_2"/>  
  13.     </menu>  
  14. </item>  



最后,就是我们要写的menu菜单中的点击事件了,NavigationView给我们提供了setNavigationItemSelectedListener方法来设置当有菜单项被点击时的回调,OnNavigationItemSelectedListener也会给我们提供被点击的MenuItem,我们可以在这里处理点击事件,改变item的状态,更新界面状态,关闭导航栏等操作;

[html]  view plain  copy
  1.  mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {  
  2.     @Override  
  3.     public boolean onNavigationItemSelected(MenuItem item) {  
  4.         switch (item.getItemId()){  
  5.             case R.id.navi_blog:  
  6.                 Toast.makeText(NavigationViewActivity.this,"Blog",Toast.LENGTH_SHORT).show();  
  7.                 break;  
  8.             case R.id.navi_home:  
  9.                 Toast.makeText(NavigationViewActivity.this,"Home",Toast.LENGTH_SHORT).show();  
  10.                 break;  
  11.             case R.id.navi_notify:  
  12.                 Toast.makeText(NavigationViewActivity.this,"Notify",Toast.LENGTH_SHORT).show();  
  13.                 break;  
  14.         }  
  15.         item.setChecked(true);  
  16.         mDrawerLayout.closeDrawer(Gravity.LEFT);//外层的DrawerLayout  
  17.         return false;  
  18.     }  
  19. });  


注意:我们上面实现的是menu菜单的点击事件,我们如果要回调headerLayout的点击事件该怎么写呢,NavigationView并没有提供一个类似于menu的点击监听,而是提供了一个getHeaderView(int index)的api,所以头布局的点击事件应该这么写:

[java]  view plain  copy
  1. mNavigationView.getHeaderView(0).setOnClickListener(new View.OnClickListener() {  
  2.           @Override  
  3.           public void onClick(View v) {  
  4.               Toast.makeText(NavigationViewActivity.this,"Pic",Toast.LENGTH_SHORT).show();  
  5.           }  
  6.       });  
  7.         


  • 小贴士:NavigationView还提供了一个getHeaderCount()的api返回头布局一共有多少个子view,可以实现任一控件的监听;

2.TextInputLayout 提升用户体验的EditText

我们之前使用EditText的时候,会使用一个hint属性,但是当用户输入的时候,hint属性值就会被清空,但是在Material Design中,谷歌又给我们提供了一个TextInputLayout来优化我们的用户体验,当获取焦点输入时,hint的值会自动缩小并跑到输入栏的上方,具体效果看图示:

 

当然,使用也非常简单:

[java]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:tools="http://schemas.android.com/tools"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     android:orientation="vertical"  
  8.     tools:context="com.suericze.myapplication.TestInput">  
  9.   
  10.     <android.support.design.widget.TextInputLayout  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="wrap_content">  
  13.         <EditText  
  14.             android:layout_width="match_parent"  
  15.             android:layout_height="wrap_content"  
  16.             android:hint="用户名/手机号"/>  
  17.     </android.support.design.widget.TextInputLayout>  
  18.   
  19.     <android.support.design.widget.TextInputLayout  
  20.         android:layout_marginTop="20dp"  
  21.         android:layout_width="match_parent"  
  22.         android:layout_height="wrap_content">  
  23.         <EditText  
  24.             android:layout_width="match_parent"  
  25.             android:layout_height="wrap_content"  
  26.             android:inputType="textPassword"  
  27.             android:hint="密码"/>  
  28.     </android.support.design.widget.TextInputLayout>  
  29.   
  30. </LinearLayout>  


注意: TextInputLayout的颜色来自style中的colorAccent的颜色,除了显示提示信息,还可以通过调用setError()在EditText下面显示一条错误信息。

3.悬浮操作按钮 FloatingActionButton

看字面意思就是悬浮按钮,是一个负责显示界面基本操作的圆形按钮,它实现了一个默认颜色为主题中colorAccent的悬浮操作按钮,它是一个带有阴影的圆形按钮,可以通过fabSize来改变其大小;有以下属性:

  • 默认颜色为colorAccent的颜色值,可以通过app:backgroundTint 属性或者setBackgroundTintList (ColorStateList tint)方法去改变背景颜色。
  • 改变尺寸:通过设置 app:fabSize 属性(mini or normal)
  • android:src 改变drawable
  • app:rippleColor 设置点击时候的颜色(水波纹效果)
  • app:borderWidth 设置button的边框宽度,该属性尤为重要,如果不设置0dp,那么在4.1的sdk上FAB会显示为正方形,而且在5.0以后的sdk没有阴影效果。所以设置为borderWidth=”0dp”
  • app:elevation 设置平常阴影状态的深度(默认6dp)
  • app:pressedTranslationZ 设置点击状态的阴影深度(默认12dp)
  • app:layout_anchor - 设置FAB的锚点,即以哪个控件为参照点设置位置
  • app:layout_anchorGravity - 设置FAB相对锚点的位置,值有 bottom、center、right、left、top等

用法,放在屏幕右下角:

[java]  view plain  copy
  1. <android.support.design.widget.FloatingActionButton  
  2.     android:layout_width="wrap_content"  
  3.     android:layout_height="wrap_content"  
  4.     android:layout_margin="20dp"  
  5.     android:layout_alignParentBottom="true"  
  6.     android:layout_alignParentRight="true"  
  7.     android:src="@mipmap/add"  
  8.     app:rippleColor="#ff0000"  
  9.     app:borderWidth="0dp"  
  10.     app:fabSize="normal"  
  11.     app:layout_anchor="@id/coordinator_layout"  
  12.     app:layout_anchorGravity="bottom|right"  
  13.     />  



实现效果如下:

4 底部Snackbar

SnackBar通过在屏幕底部展示一个简洁的信息,为用户提供一个友好的反馈,用法类似于Toast,区别在于第一个参数不需要上下文而是所依附的父view,而且在同一时间内只能显示一个Snackbar,同时可以为用户提供一个动作操作,用户可以在它消失之前滑动删除; 最简单用法:


Snackbar.make(mParentView, "SnackbarClicked", Snackbar.LENGTH_LONG).show(); 

我们来看效果图: 

OK,我们现在来看一下带有Action的SnackBar怎么使用,

[java]  view plain  copy
  1. Snackbar.make(mRelativeLayout, "SnackbarClicked", Snackbar.LENGTH_SHORT).setAction("Test"new View.OnClickListener() {  
  2.            @Override  
  3.            public void onClick(View v) {  
  4.                Toast.makeText(TestInput.this,"Clicked",Toast.LENGTH_SHORT).show();  
  5.            }  
  6.        }).show();  


这里我们给SnackBar设置了一个Action,当我们点击Test时候,就会弹出吐司,效果如下: 

 


原文地址:http://blog.csdn.net/smallcheric/article/details/51205295

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值