public class CustomView extends ViewGroup { private int ori = 0; private int hmode; private int hmode1; public CustomView(Context context) { this(context, null); } public CustomView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } public CustomView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } private void init(Context context, AttributeSet attrs) { } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measureChildren(widthMeasureSpec, heightMeasureSpec); int wsize = MeasureSpec.getSize(widthMeasureSpec); int wmode = MeasureSpec.getMode(widthMeasureSpec); int hsize = MeasureSpec.getSize(heightMeasureSpec); hmode1 = MeasureSpec.getMode(heightMeasureSpec); int left = 0; int top = 0; switch (ori) { case 0: for (int i = 0; i < getChildCount(); i++) { View childAt = getChildAt(i); int mHeight = childAt.getMeasuredHeight(); int mWidth = childAt.getMeasuredWidth(); if (0 == i) { left += 40 + mWidth; top += mHeight + 40; } else { if (left + 40 + mWidth > wsize) { left = 40 + mWidth; top += mHeight + 40; } else { left += 40 + mWidth; } } } setMeasuredDimension(wsize, top); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount = getChildCount(); lHorizontal(hmode1); } public void lHorizontal(int hmode) { int measuredWidth = getWidth(); int childCount = getChildCount(); int left = 0; int top = 0; for (int i = 0; i < childCount; i++) { View childAt = getChildAt(i); int mHeight = childAt.getMeasuredHeight(); int mWidth = childAt.getMeasuredWidth(); if (left + mWidth + 20 > measuredWidth) { left = 0; top += mHeight + 20; } childAt.layout(left + 20, top + 20, left + mWidth + 20, top + mHeight + 20); left += mWidth + 20; } } }