Material Design——控件大汇总(一)

我尽量不打错别字,用词准确,不造成阅读障碍。

最近打算整理一下Google的Material Design风格的控件,虽然这个东西已经出来很长时间了,之前也写过很多次MD的控件,但是一直涉入不深,感觉市面上的APP中,大量级的APP一般不用MD,网易系的用的多一些,小量级的APP中的部分,甚至是个人开发者,用的多一些。

关于Material Design的设计理念和规则,请参看官方文档,这里有一篇归纳,实际开发中很有指导作用。
http://www.cnblogs.com/syjhsgcc/p/4771931.html

本篇主要是讲解控件部分,布局部分的内容下一篇讲,本篇文章涉及:TextInputLayout、CardView、SwitchCompat、SnackBar、FloatingActionButton

TextInputLayout

从名字上看这个属于布局了,实际也的确是布局,继承自LinearLayout,但是使用中感觉知识点不多,当做控件理解也是可以的,也是我接触的第一个MD布局。

最简单的效果:
这里写图片描述
没什么好描述的,一眼就看明白了。
代码:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="userName" />
</android.support.design.widget.TextInputLayout>

TextInputLayout包裹EditText,注意:TextInputLayout只能有一个子控件,要不然报错:
这里写图片描述

改变下划线颜色:
在当前布局的根布局处设置style:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    style="@style/text_inp"
    tools:context="com.clone.surpassli.mddemo.TextInputLayoutActivity">
  ......
</LinearLayout>

style中设置属性:

<style name="text_inp">
        <item name="android:colorAccent">#00ff00</item>
</style>

还可以在activity的布局style里设置这个属性,要不然就在AppTheme设置;

改变hint文字选中后的样式:
TextInputLayout设置属性:

app:hintTextAppearance="@style/text_input_layout"
<style name="text_input_layout" parent="TextAppearance.AppCompat">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">#000000</item>
</style>

效果:
这里写图片描述
password选中时变成了黑色,大小为16sp。

加上字数统计及样式:
TextInputLayout设置属性:

app:counterEnabled="true"      //设置是否显示字数统计
app:counterMaxLength="15"      //设置字数统计的最大值
app:counterOverflowTextAppearance="@style/counterOverFlowAppearance"   //设置超出最大值后的样式
app:counterTextAppearance="@style/counterAppearance"                   //设置字数统计的样式
<style name="counterOverFlowAppearance" parent="TextAppearance.AppCompat">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">#000</item>
</style>
<style name="counterAppearance" parent="TextAppearance.AppCompat">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">#ff00</item>
</style>

效果:
这里写图片描述
正常字数统计是红色的,当超过字数的时候就变为黑色了,此时下划线也变为了黑色。

加上错误提示及样式:

app:errorEnabled="true"
app:errorTextAppearance="@style/errorAppearance"
<style name="errorAppearance" parent="TextAppearance.AppCompat">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">#ff00</item>
</style>
til_til.setError("超出字数限制");

效果:
这里写图片描述
超出字数限制后提示文字会出来,此时下划线的颜色变为了红色,与错误提示文字颜色相同。
简化版
你可能觉得这样很麻烦,有相对简单的方法,在根布局的style设置以下属性:

<style name="text_inp">
        <item name="android:colorAccent">#00ff00</item>              //不起作用       
        <item name="android:textColorHint">#674ea7</item>            //默认hint颜色
        <item name="colorControlNormal">#000</item>                  //不起作用
        <item name="colorControlActivated">#ff0</item>               //获取焦点的时候的颜色
        <item name="textColorError">#0000ff</item>                   //错误提示的颜色
        <item name="colorControlHighlight">@color/colorAccent</item> //不起作用
    </style>

正如注释所写的,有些属性不起作用,而且下划线的颜色改变与错误提示、是否获取焦点等还有联系,所以总体感觉不如单独写方便理解、控制、修改,还可以只写一个style供所有属性调用。
设计要求:
TextInputLayout是有设计要求的,也许公司的设计与MD的要求不一样,但是你还是应该看一看,尽量按照Google来。

  • 输入框点击区域高度至少48dp,但横线并不在点击区域底部,还有8dp距离。
    这里写图片描述
  • 右下角可以加入字数统计。字数统计不要默认显示,字数接近上限时在显示出来。
  • 同时有多个错误提示时,屏幕顶部应有一个全局的错误提示通知。
  • 输入框尽量带有自动补全功能。

CardView

我最喜欢的控件,很能提现MD风格。
这里写图片描述
可以设置圆角弧度,还可以设置z轴高度,显示阴影效果。CardView是个Group,继承自FrameLayout。

 <android.support.v7.widget.CardView
        android:layout_width="300dp"
        android:layout_height="200dp"
        app:cardBackgroundColor="@color/colorPrimaryDark"
        app:cardCornerRadius="10dp"
        app:contentPadding="20dp"
        app:cardElevation="23dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="感谢大家浏览我的博客,有什么问题请留言"
            android:textColor="#ffffff" />
 </android.support.v7.widget.CardView>

CardView的属性设置都是"app:"开头的,如果使用"android:"开头的是没有效果的。

  • app:cardBackgroundColor:设置背景色。
  • app:cardCornerRadius:设置角的弧度,MD设计要求统一为2dp,但是2dp感官上不太明显。
  • app:contentPadding:内容padding。
  • app:cardElevation:设置z轴高度。

设计要求:

  • 圆角弧度统一要求2dp。
  • 卡片最多包涵两块操作区域,辅助操作区至多包含两个操作项,更多操作需要使用下拉菜单。其余部分都是主操作区。

SwitchCompat

选项开关,这个是控件View。
switch_normal
一般代码设置的比较多:

mSwitchCompat.setError("错误");      //设置错误信息的显示
mSwitchCompat.setTextOff("off");     //设置关闭时的文字
mSwitchCompat.setTextOn("on");       //设置打开时的文字
mSwitchCompat.setShowText(true);     //设置是否显示文字
mSwitchCompat.setSwitchPadding(20);  //设置文字与开关的间隙
mSwitchCompat.setChecked(true);      //设置是否是选中(打开)状态
mSwitchCompat.setOnCheckedChangeListener();  //设置打开关闭监听

如果设置颜色,请在activity的style中设置"colorAccent"的颜色。

SnackBar

SnackBar类似于Toast,都是对用户的提醒和解释说明等等。
这里写图片描述
最普通的SnackBar,只有文字说明,复杂的SnackBar可以带按钮及事件。

Snackbar.make(v, "谢谢浏览我的博客", Snackbar.LENGTH_SHORT).show();  //和Toast很像

如果有FloatingActionButton之类的东西的话,SnackBar是不允许遮挡的,控件应随之上移和下移。
这里写图片描述
复杂一点的SnackBar,可以增加点击:
这里写图片描述

Snackbar.make(v, "谢谢浏览我的博客", Snackbar.LENGTH_SHORT).setAction("action", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(SwitchCompatActivity.this, "snack bar ", Toast.LENGTH_SHORT).show();
                    }
                }).show();

SnackBar的样式可以自定义,参考Toast的方法,规则如下:
这里写图片描述
设计要求:

  • SnackBar至多包含一个操作项,不能包含图标,不能出现一个以上的SnackBar。

FloatingActionButton

一般悬浮于手机屏幕右下角的一个按钮,当然也有放在屏幕中上位置的。
这里写图片描述
这里写图片描述

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_dialog_email" />

设置图片源,背景色随主题的colorAccent变化,比较简单,但是设计上有些学问:

  • 建议只用一个悬浮按钮。
  • 悬浮按钮可以贴在纸片边缘或者接缝处,但不要贴在对话框、侧边抽屉和菜单的边缘。
  • 悬浮按钮不能被其它元素盖住,也不能挡住其它元素。
  • 列表滚动至底部时,悬浮按钮应该隐藏,防止它挡住列表项。
  • 悬浮按钮的位置不能随意摆放,可以贴着左右两边的对齐基线。
  • 悬浮按钮通常触发正向的操作,添加、创建、收藏之类。不能触发负面、破坏性或不重要的操作,也不应该有数字角标。
  • 悬浮按钮有两种尺寸:56x56dp/40x40dp。

这篇文章先写到这里,感觉有点多,还是要分篇叙述。可移步下一篇文章:
Material Design——控件大汇总(二)

参考文章(感谢):
http://www.cnblogs.com/syjhsgcc/p/4771931.html
https://blog.csdn.net/johnny901114/article/details/51918436

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值