此方法是固定每行居中

使用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. Android设置字间距和行间距
  2. Android设置TextView行间距(非行高)
  3. android textview 行间距
  4. Android TextView 设置行间距字间距
  5. Android控制文字水平间距android:letterSpacing
  6. C#如何计算传入的时间距离今天的时间差的实例分享
  7. HTML DIV百分比宽度奇奇怪怪的间距产生了?
  8. JavaScript作为内联块去间距的强大黑客

随机推荐

  1. 学习android的一些套路(转发之小黑屋总结)
  2. Android学习系列(29)--App调试的几个命令
  3. Android中的AIDL
  4. Android(安卓)Service的使用方法 音乐播
  5. 解决 Android(安卓)中使用ListView和Chec
  6. Android(安卓)setTag方法的key问题
  7. android 内存管理
  8. 为Android应用程序读取/dev下设备而提权(
  9. android进程间服务通信示例
  10. Android开发小记--开发实用工具类--数据