刚开始学习MaterialDesign,我先到安卓技术开发周报里查看了MaterialDesign的相关简介,除开针对UI的规范,我更关心的是如何在代码中引用到MD风格的控件,于是我从官方提供的BottomNavigationView开始学习,这是一个类似于以前我们自己实现的底边栏的效果的控件。
首先展示项目的源码结构
首先使用MD的控件需要在AndroidStudio中引入相关的支持包,此处在.gradle文件(module)中加入dependencies,如下图所示
坑1:注意两个版本匹配,不然可能出现无法inflate控件的错误喔。
然后使用这个控件需要编写一个menu文件,我创建的是最最基础的工程,里面并没有menu文件夹,自己创建一个,并建立一个menu文件如下所示
这里面的每个item都是一个底部栏的一个项目
然后就是在layout文件中引用它啦
引用的时候控件申明为android.support.design.widget.BottomNavigationView
这里我们注意这些属性
app:menu 这个属性将我们刚才编写的menu文件作为资源文件引入,也就是说底端的菜单的item是由这个文件来决定的
app:itemIconTint 和 app:itemTextColor 这两个属性分别指定了按钮在被点击时和未被点击时的颜色/下面的文字在点击时和未被点击时的颜色,这里我使用了selector的方式对其指定,放在drawable下的xml文件里
android:background 这里和平时设置背景色一模一样
style 指定引用一个style.xml中的风格
这里我的style只有一条itemBackgroud,也是引用了一个xml文件,这个xml文件较为特殊,指定的是波纹效果,这个只有在sdk21以上才可以使用喔
波纹文件用ripple定义
细心的可能会发现,为什么不把所有的item都定义在style里呢,或者说明明只有一个style为什么不放在外面呢,其实和都是可以的,毕竟style只是把属性集合到一起方便复用
,其实我也是对着别人的代码边思考边写,然后到最后才发现这个问题的,我把代码又整理了一下,全部收到style里面去,layout和style分别是这样子的
坑2:注意一下,因为使用了波纹效果,所以minSdk要大于等于21,如果要适配小于21的手机,必须将itemBackground属性去掉,不然会引发materialDesign控件inflate失败的错误!!
今天只是尝试了一下控件的效果,点击事件还没实现,实现完了我会编辑在下面的。