阅读背景:

Android View measure (五) 支持margin属性,从一个异常说起

来源:互联网 



    先来看下代码


一、查看夏目

1. 自定义控件
public class CustomViewGroup extends ViewGroup {
    
	......


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        
		// 遍历所有子视图,进行measure操作
        for (int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            if (child != null && child.getVisibility() != View.GONE) {
                measureChild(child, widthMeasureSpec, heightMeasureSpec);
                
				// 支撑子视图设置的android:layout_margin属性
                MarginLayoutParams layoutParams = (MarginLayoutParams) child.getLayoutParams();
                int marginLeft = layoutParams.leftMargin;
            }
        }
        
        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
    }


    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        for (int i = 0; i < getChildCount(); i++) {
            View childView = getChildAt(i);
			// 只为最简略代码复现BUG,所有子视图都随意放
            childView.layout(left, top, left + childView.getMeasuredWidth(), top + childView.getMeasuredHeight());
        }
    }
}public class CustomV




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: