zoukankan      html  css  js  c++  java
  • Android 自动换行流式布局的RadioGroup

    用法

    使用FlowRadioGroup代替RadioGroup

    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;
    import android.widget.RadioGroup;
    
    /**
     * 流式布局的RadioGroup
     */
    public class FlowRadioGroup extends RadioGroup {
        
        public FlowRadioGroup(Context context) {
            super(context);
        }
    
        public FlowRadioGroup(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int maxWidth = MeasureSpec.getSize(widthMeasureSpec);
            int childCount = getChildCount();
            int x = 0;
            int y = 0;
            int row = 0;
    
            for (int index = 0; index < childCount; index++) {
                final View child = getChildAt(index);
                if (child.getVisibility() != View.GONE) {
                    child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
                    // 此处增加onlayout中的换行判断,用于计算所需的高度
                    int width = child.getMeasuredWidth();
                    int height = child.getMeasuredHeight();
                    x += width;
                    y = row * height + height;
                    if (x > maxWidth) {
                        x = width;
                        row++;
                        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;
            int y = 0;
            int row = 0;
            for (int i = 0; i < childCount; i++) {
                final View child = this.getChildAt(i);
                if (child.getVisibility() != View.GONE) {
                    int width = child.getMeasuredWidth();
                    int height = child.getMeasuredHeight();
                    x += width;
                    y = row * height + height;
                    if (x > maxWidth) {
                        x = width;
                        row++;
                        y = row * height + height;
                    }
                    child.layout(x - width, y - height, x, y);
                }
            }
        }
    }
  • 相关阅读:
    正态分布与中心极限定理
    超几何分布与二项分布及其期望
    cf492E. Vanya and Field(扩展欧几里得)
    ZR#317.【18 提高 2】A(计算几何 二分)
    小米OJ刷题日志
    cf519D. A and B and Interesting Substrings(前缀和)
    cf519C. A and B and Team Training(找规律)
    BZOJ2118: 墨墨的等式(最短路 数论)
    Service生命周期图
    python2.7中使用mysql (windows XP)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6033412.html
Copyright © 2011-2022 走看看