android 动态让控件超出屏幕_Android radiobutton动态添加控件超出本行后自动换行实现...

解决Android RadioGroup横排时控件超出屏幕的问题,通过重写RadioGroup实现动态换行,保持界面美观。
摘要由CSDN通过智能技术生成

我们在开发的过程中,很多地方会使用到radioGroup和radioButton,但是默认的radioGroup只支持横排或者竖排,如果使用横排,有时候会出现一排显示不全的问题,界面显得很难看,本来应该显示成这样的:

0818b9ca8b590ca3270a3433284dd417.png

结果显示成这样了

0818b9ca8b590ca3270a3433284dd417.png

发现很难看,处理方法如下,重写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);

}

}

}

}

布局里面直接把RadioGroup改成FlowRadioGroup就能使用,如下图:

0818b9ca8b590ca3270a3433284dd417.png

备注:其它空间动态添加也可以使用这种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值