Android 控件自动换行

来源:互联网 发布:木马下载软件 编辑:程序博客网 时间:2024/05/16 15:25

/**
*
* @author zzp
* 自动换行
*/
public class CustomAutoChangeLine extends ViewGroup {
private static final int PADDING_HOR = 10;// 水平方向padding
private static final int PADDING_VERTICAL = 5;// 垂直方向padding
private static final int SIDE_MARGIN = 10;// 左右间距
private static final int TEXT_MARGIN = 2;

/** * @param context */public CustomAutoChangeLine(Context context) {    super(context);}/** * @param context * @param attrs * @param defStyle */public CustomAutoChangeLine(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);}/** * @param context * @param attrs */public CustomAutoChangeLine(Context context, AttributeSet attrs) {    super(context, attrs);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {    int childCount = getChildCount();    int autualWidth = r - l;    int x = SIDE_MARGIN;// 横坐标开始    int y = 0;// 纵坐标开始    int rows = 1;    for (int i = 0; i < childCount; i++) {        View view = getChildAt(i);        // view.setBackgroundColor(Color.GREEN);        int width = view.getMeasuredWidth();        int height = view.getMeasuredHeight();        x += width + TEXT_MARGIN;        if (x > autualWidth) {            x = width + SIDE_MARGIN;            rows++;        }        y = rows * (height + TEXT_MARGIN);        if (i == 0) {            view.layout(x - width - TEXT_MARGIN, y - height, x - TEXT_MARGIN, y);        } else {            view.layout(x - width, y - height, x, y);        }    }};@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    int x = 0;// 横坐标    int y = 0;// 纵坐标    int rows = 1;// 总行数    int specWidth = MeasureSpec.getSize(widthMeasureSpec);    int actualWidth = specWidth - SIDE_MARGIN * 2;// 实际宽度    int childCount = getChildCount();    for (int index = 0; index < childCount; index++) {        View child = getChildAt(index);        child.setPadding(PADDING_HOR, PADDING_VERTICAL, PADDING_HOR, PADDING_VERTICAL);        child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);        int width = child.getMeasuredWidth();        int height = child.getMeasuredHeight();        x += width + TEXT_MARGIN;        if (x > actualWidth) {// 换行            x = width;            rows++;        }        y = rows * (height + TEXT_MARGIN);    }    setMeasuredDimension(actualWidth, y);}

}

布局文件

0 0
原创粉丝点击