72 lines
2.3 KiB
Java
72 lines
2.3 KiB
Java
package cn.shangyu.gdxzExpert.widget;
|
|
|
|
import android.content.Context;
|
|
import android.util.AttributeSet;
|
|
import android.view.View;
|
|
import android.widget.RadioGroup;
|
|
|
|
public class GridRadioGroup extends RadioGroup {
|
|
//子布局RadioButton 列数
|
|
private int column = 2;
|
|
//文字
|
|
private int textPaddingTB = 0;
|
|
|
|
private int widthmargin = 0;
|
|
private int heighmargin = 0;
|
|
private int itemWidth;
|
|
|
|
public GridRadioGroup(Context context) {
|
|
this(context, null);
|
|
}
|
|
|
|
public GridRadioGroup(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
}
|
|
|
|
@Override
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
|
|
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
|
|
itemWidth = (widthSize - (column + 1) * widthmargin) / column;
|
|
|
|
int childCount = getChildCount();
|
|
|
|
int itemHeight = 0;
|
|
|
|
for (int i = 0; i < childCount; i++) {
|
|
View child = getChildAt(i);
|
|
child.setPadding(0, textPaddingTB, 0, textPaddingTB);
|
|
child.measure(MeasureSpec.makeMeasureSpec(itemWidth, MeasureSpec.EXACTLY),
|
|
MeasureSpec.UNSPECIFIED);
|
|
itemHeight = child.getMeasuredHeight();
|
|
}
|
|
|
|
int rows = childCount % column == 0 ? childCount / column : childCount / column + 1;
|
|
int heightSize = rows * itemHeight + (rows + 1) * heighmargin;
|
|
setMeasuredDimension(widthMeasureSpec, heightSize);
|
|
}
|
|
|
|
@Override
|
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
|
int childCount = getChildCount();
|
|
int rows = 0;
|
|
for (int i = 0; i < childCount; i++) {
|
|
View view = getChildAt(i);
|
|
int width = view.getMeasuredWidth();
|
|
int height = view.getMeasuredHeight();
|
|
|
|
int yu = i % column;
|
|
int cl, ct, cr, cb;
|
|
if (i >= column - 1 && yu == 0) {
|
|
rows++;
|
|
}
|
|
|
|
cl = widthmargin * (yu + 1) + yu * width;
|
|
ct = heighmargin * (rows + 1) + rows * height;
|
|
cr = widthmargin * (yu + 1) + (yu + 1) * width;
|
|
cb = heighmargin * (rows + 1) + (rows + 1) * height;
|
|
view.layout(cl, ct, cr, cb);
|
|
}
|
|
}
|
|
}
|