动态生成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);