zoukankan      html  css  js  c++  java
  • 动态生成radiobutton超出本行后自动换行实现

    1、自定义的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);
                }
            }
        }
    }

    2、布局中插入上面自定义的Class

    3、动态生成

     radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
    
            for (int i = 0; i < 10; i++) {
                RadioButton radioButton = new RadioButton(this);
                RadioGroup.LayoutParams lp = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT);
                //设置RadioButton边距 (int left, int top, int right, int bottom)
                lp.setMargins(15,0,0,0);
                //设置RadioButton背景
                //radioButton.setBackgroundResource(R.drawable.xx);
                //设置RadioButton的样式
                radioButton.setButtonDrawable(R.drawable.radio_bg);
                //设置文字距离四周的距离
                radioButton.setPadding(80, 0, 0, 0);
                //设置文字
                radioButton.setText("this is radioButton  " + i);
                final int finalI = i;
                //设置radioButton的点击事件
                radioButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(MainActivity.this, "this is radioButton  " + finalI, Toast.LENGTH_SHORT).show();
                    }
                });
                //将radioButton添加到radioGroup中
                radioGroup.addView(radioButton,lp);
  • 相关阅读:
    UML学习——用例图(二)
    servlet相关生命周期(二)
    UML 学习——UML概述(一)
    servlet概述(一)
    java 核心编程——线程之线程控制(五)
    java 核心编程——线程之线程池(ExecutorService)(四)
    java 核心编程——线程之线程组(四)
    java 核心编程——线程之定时器(TimerTask)(三)
    java 核心编程——线程之线程的开发方法(二)
    java 核心编程——线程之线程的基本概念(一)
  • 原文地址:https://www.cnblogs.com/jsben/p/8526301.html
Copyright © 2011-2022 走看看