public class AutoNewLineViewGroup extends ViewGroup {
private final static int VIEW_MARGIN = 10;// 控件之间间距
public AutoNewLineViewGroup(Context context) {
super(context);
}
public AutoNewLineViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AutoNewLineViewGroup(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
for (int index = 0; index < getChildCount(); index++) {
View child = getChildAt(index);
child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int count = getChildCount();
int row = 0;
int lengthX = l; // 子View右边界(包含间距)
int lengthY = b; // 子View下边界(包含间距)
for (int i = 0; i < count; i++) {
View child = this.getChildAt(i);
int childWidth = child.getMeasuredWidth();
int childHeight = child.getMeasuredHeight();
lengthX += childWidth + VIEW_MARGIN;
lengthY = (row + 1) * (childHeight + VIEW_MARGIN) + t;
// 换行
if (lengthX > r) {
lengthX = childWidth + VIEW_MARGIN + l;
row++;
lengthY = (row + 1) * (childHeight + VIEW_MARGIN) + t;
}
//离左上角VIEW_MARGIN距离
child.layout(lengthX - childWidth, lengthY - childHeight, lengthX,
lengthY);
// 顶在左上角
/*
* child.layout(lengthX - childWidth - VIEW_MARGIN, lengthY -
* childHeight - VIEW_MARGIN, lengthX - VIEW_MARGIN, lengthY -
* VIEW_MARGIN);
*/
}
}
}