此方法是固定每行居中

使用android:paddingLeft="@dimen/margin_common_10"android:paddingRight="@dimen/margin_common_15"进行调整左右间距
import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;public class FlexBoxLayout extends ViewGroup {    /**     * 居中换行     */    public int foxheight= 5;//换行H间隙    public FlexBoxLayout(Context context) {        this(context, null);    }    public FlexBoxLayout(Context context, AttributeSet attrs) {        super(context, attrs);    }    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int maxWidth = MeasureSpec.getSize(widthMeasureSpec);        int childCount = getChildCount();        int x = 0,y = 0,row = 0,ih=0;        for(int i = 0; iih)            {                ih = getChildAt(i).getMeasuredHeight();            }        }        for (int index = 0; index < childCount; index++) {            final View child = this.getChildAt(index);            if (child.getVisibility() != View.GONE ) {                child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);                // 此处增加onlayout中的换行判断,用于计算所需的高度                int width = child.getMeasuredWidth();                int height = ih;                x += width;                y = row * height + height;                if (x > maxWidth) {                    x = width;                    row++;                    ih = ih+foxheight;                    height = ih;                    y = row * (height) + height;                }            }        }        setMeasuredDimension(maxWidth, y);    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        final int childCount = getChildCount();        int maxWidth = r - l;        int x = 0,y = 0,row = 0,ih=0;        for(int i = 0; iih)            {                ih = getChildAt(i).getMeasuredHeight();            }        }        for (int i = 0; i < childCount; i++) {            final View child = this.getChildAt(i);            if (child.getVisibility() != View.GONE ) {                int width = child.getMeasuredWidth();                int height = ih;                x += width;                y = row * height + height;                if (x > maxWidth) {                    x = width;                    row++;                    ih = ih+foxheight;                    height = ih;                    y = row * (height) + height;                }                if( child.getMeasuredHeight()< ih)                {                    child.layout((x - width) + getPaddingLeft(), (y - height)+(ih-child.getMeasuredHeight())/2 ,                            x- + getPaddingRight(), y-(ih-child.getMeasuredHeight())/2);                }else{                    child.layout((x - width) + getPaddingLeft(),  y - height, x + getPaddingRight(), y);                }            }        }    }}

更多相关文章

  1. 怎么让Linearlayout里面的textview垂直居中
  2. Android(安卓)TextView的一些小知识
  3. RelativeLayout参数意义
  4. Android设置字间距和行间距
  5. Android(安卓)ImageButton android:scaleType
  6. Android中gravity与layout_gravity的区别
  7. Android(安卓)自定义RadioButton样式 RadioGroup横向排列并分行
  8. 【转】Android中gravity与layout_gravity的区别
  9. gravity 和 layout_grativy 区别

随机推荐

  1. 原YUV格式的解析 Android NV21 视频采集
  2. Android中TextView中加图片,超链接,一部分
  3. Android 监听短信接收 获取发件号码、短
  4. Android之开发杂记(一)
  5. Android DownloadManager 的使用
  6. 学习Android之setDataAndType(利用第三方
  7. Android 修改打包APP默认名称(app-release
  8. android 对比版本号
  9. 修改 ActivityManagerService.java 去掉
  10. Android开发 - 丰富常用的颜色文件colors