您的位置:首页 > 编程语言 > PHP开发

ViewGroup和LayoutParams之间的关系

2015-11-14 10:59 706 查看
当在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: