android 自动换行布局
16lz
2021-01-23
此方法是固定每行居中
使用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; i ih) { 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); } } } }}
更多相关文章
- Android设置字间距和行间距
- Android设置TextView行间距(非行高)
- android textview 行间距
- Android TextView 设置行间距字间距
- Android控制文字水平间距android:letterSpacing
- C#如何计算传入的时间距离今天的时间差的实例分享
- HTML DIV百分比宽度奇奇怪怪的间距产生了?
- JavaScript作为内联块去间距的强大黑客