本文主要是介绍自定义Linearlayout,实现dividerPaddingLeft和dividerPaddingRight,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在项目中经常会用到分割线,很多应用的“我的”模块,都会用到分割线,那么怎么优雅的实现这种很简单的效果呢?
实现它一般最简单最麻烦的方法可能就是Linearlayout然后里面每个子view之间用一个view,然后设置背景,然后高度设置为1px了,其实,最初我也这么搞过,但是效率实在是低呀,后来知道了Linearlayout自己就有实现分割线的属性了,就是一个divider属性,它指向的是一个drawable文件了,既然是drawable,那么可定制化的东西就很多了,然后showDividers是指这个分割线显示的位置,同样可能用到的一个属性就是dividerPadding了,它是指代分割线距离边界的距离,距离两边都有哦,说的这些大家也都知道。
以前这么用也没什么问题,后来ui设计师又要仿照ios了,ios的分割线一般都是距离左边有一段距离,而对于右边则是顶边的,那么单纯的设置dividerPadding是不可以的,有的同学说,我可以直接给该linearlayout设置一个paddingLeft呀,这样子也没问题,可是要是要加点击效果呢?设置了paddingLeft后,点击效果背景变化也会距离左边一段距离呀。那怎么办?难道又要回到设置通过设置空view然后设置背景的老路了吗?其实此刻想的是要是Android提供一个dividerPaddingLeft该多好呀。可是现实是人家没提供。
然后就去看看linearlayout中关于dividerPadding到底是怎么处理的吧,或许我们可以自定义下呢,首先是可以看到通过mDividerPadding = a.getDimensionPixelSize(R.styleable.LinearLayout_dividerPadding, 0);通过这个属性获取到xml中设置的dividerPadding的值,然后看到用到的地方就是两个地方:
void drawHorizontalDivider(Canvas canvas, int top) {mDivider.setBounds(getPaddingLeft() + mDividerPadding, top, getWidth() - getPaddingRight() - mDividerPadding, top + mDividerHeight);mDivider.draw(canvas);}
可以看到一个是绘制竖直方向上的分割线,一个则是绘制水平方向上的分割线的,其实我们要是能把这两个方法给改了,那就不达到了我们变相设置dividerPaddingLeft的效果了嘛,其实我们只需要将第一个方法drawHorizontalDivider改为如下方式就好了,
void drawHorizontalDivider(Canvas canvas, int top) {mDivider.setBounds(getPaddingLeft() + mDividerPadding, top, getWidth() - getPaddingRight(), top + mDividerHeight);mDivider.draw(canvas);}
只修要将mDivider的setBounds的第三个设置right方向距离的参数改下就好了。然后我们的目标明确了,接下来就是实现了,哈哈哈。
看了下,linearlayout的代码还是蛮多的
这篇关于自定义Linearlayout,实现dividerPaddingLeft和dividerPaddingRight的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!