ViewGroup和LayoutParams之间的关系

当在LinearLayout中写childView的时候,可以写layout_gravity,layout_weight属性;在RelativeLayout中的childView有layout_centerInParent属性,却没有layout_gravity,layout_weight,这是为什么呢?这是因为每个ViewGroup需要指定一个LayoutParams,用于确定支持childView支持哪些属性,比如LinearLayout指定LinearLayout.LayoutParams等。如果大家去看LinearLayout的源码,会发现其内部定义了LinearLayout.LayoutParams,在此类中,你可以发现weight和gravity的身影。

比如现在我们想重写一个viewgroup,然后只希望其中的子view支持margin属性那么我们可以重写generateLayoutParams

@Override
	public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs)
	{
		return new MarginLayoutParams(getContext(), attrs);
	}

而ViewGroup.MarginLayoutParams的定义关键部分如下,它记录了子控件的layout_margin值:

public static class MarginLayoutParams extends ViewGroup.LayoutParams {        
    public int leftMargin;
    public int topMargin;
    public int rightMargin;
    public int bottomMargin;
}

参考:http://blog.csdn.net/lmj623565791/article/details/38339817





你可能感兴趣的:(ViewGroup和LayoutParams之间的关系)