给LinearLayout加上花式分割线
前言
写安卓的同学们应该都知道LinearLayout有一个分割线的功能,可以在子View间添加分割线或是给整个LinearLayout上下加上分割线,同时对于分割线的样式,可以通过自定义drawable的方式来实现,灵活度很高,但这种方式也让开发人员的编码变得非常痛苦。写安卓也有一段时间了,你要问我安卓开发的过程中,最不愿意面对的事情是什么,我想说就是打开我的drawable文件夹或是打开layout文件夹了… 对于一个简单的横线,我还是不太愿意定义一个drawable文件来解决这个问题,毕竟图多了不好找,我又不是HashMap! 所以今天来讨论下怎么去掉这个drawable文件的问题。
惯例上图
最终通过继承LinearLayout的方式干掉了drawable文件,直接通过属性指定即可,同时还顺带做了分割线颜色尺寸位置的控制,每条分割线都可以单独控制,是不是很带劲
使用方式
自定义ViewGroup(DividerLayout)是LinearLayout的子类,它可以为每一个直接子View提供在其上下两侧绘制分割线的功能,你可以直接在每个子View中声明app:divider_top="true"
或者app:divider_bottom="true"
来绘制某个子View的上下分割线
同时你可以通过:
app:divider_size="2px"
app:divider_color="@color/colorPrimary"
app:divider_padding_left="48dp"
app:divider_padding_right="48dp"
这四个选项来控制每一条分割线的颜色大小及padding。值得一说的是,如果这些属性被声明在DividerLayout中,这些属性将被作为默认属性应用到每一个子view中 但子view可以再次声明相关属性达到覆盖的效果
除了可以在子View上下添加分割线,整个DividerLayout也是支持在自己的上面或下面绘制分割线的 使用方式同子View一样依然是app:divider_top="true"
或者app:divider_bottom="true"
,只不过把他写到DividerLayout中就可以了。
这样一来,整个DividerLayout就实现了全部的LinearLayout提供的分割线功能,同时,提供了更加细化和简单的控制方式,所以,请尽情享用它吧!
贴一下上面那张图的xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:background="#f0f0f0"
android:layout_height="match_parent">
<com.congxiaoyao.xber_admin.widget.XberDividerLayout
app:divider_color="@color/colorPrimary"
app:divider_size="2px"
app:divider_bottom="true"
android:layout_marginTop="8dp"
android:orientation="vertical"
android:background="#ffffff"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:textSize="17sp"
android:gravity="center"
app:divider_top="true"
android:text="第一项" />
<TextView
app:divider_top="true"
app:divider_padding_left="24dp"
app:divider_padding_right="24dp"
app:divider_color="#b44bb8"
android:layout_width="match_parent"
android:layout_height="40dp"
android:textSize="17sp"
android:gravity="center"
android:text="第二项" />
<TextView
app:divider_top="true"
app:divider_padding_left="48dp"
app:divider_padding_right="48dp"
app:divider_color="#008d58"
android:layout_width="match_parent"
android:layout_height="40dp"
android:textSize="17sp"
android:gravity="center"
android:text="第三项" />
<TextView
app:divider_top="true"
app:divider_padding_left="72dp"
app:divider_padding_right="72dp"
app:divider_color="#efb11f"
android:layout_width="match_parent"
android:layout_height="40dp"
android:textSize="17sp"
android:gravity