自定义View实现LinearLayout
LinearLayout是我们常用的布局之一,下面我们通过继承ViewGroup来自己写一个具有纵向布局的LinearLayout。
先来看效果图:
onMeasure
这里我们新建了一个类名为MyLinearLayout
,其中我们重写了onMeasure
函数用于处理当前View的大小。
这里主要对第二部进行说明,其他内容在上一篇已说过这里不再介绍,文章顶部直接导航到上一篇。
在第二部中我们循环所有的子View,并使用getChildAt函数通过索引拿到特定View的实例,紧接着调用从ViewGroup继承的measureChild函数,直接将我们的onMeasure中的两个参数传入。紧接着我们需要将宽高保存一下,宽度我们取最大值,高度进行累加,如果是横向布局就反过来高度取最大值,长度累加。最后设置尺寸即可。
public class MyLinearLayout extends ViewGroup {
public MyLinearLayout(Context context) {
super(context);
}
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure