关于android radioButton换行/摆放的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于android radioButton换行/摆放的问题相关的知识,希望对你有一定的参考价值。

是这样的,我有个radioGroup,一共有6个radioButton,需要在屏幕顶部横向排列,但是太宽,需要换行才行,(见图)可是试了好多办法,都不换行,都直接冲出屏幕了,请高手帮忙看一下,怎样才能让他换行,或者放到我想要放的位置呢

NND,本来有好几百分,都是我一点点回答问题赚的,可是号被盗了~真气人!~

参考技术A radiogroup是一个组件,这个好像不行,要么你两个radiogroup来搞,然后写套逻辑来判断如果上面的radiogroup中的radiobutton是否有选中,如果有,不让下面那组的radiobutton有点击效果,这样可以?追问

这样不可以,呵呵改变radiobutton状态会触发监听器,会形成死循环,已经用别的方法解决了,谢谢~~呵呵

追答

请问你是怎么做到的,我试了一下好像不行,我也是菜鸟...

参考技术B 不能把里面的radiobutton宽度给小点么追问

不是给小点。就是为了要两行

自定义可自动换行的RadioButton组件

✏️ 丨 自定义可自动换行的RadioButton组件

1. 需求如下:

前阵子做了一个点名管理的需求,点名状态由后端配置的,不同大队的点名机制可能不同,比如一中队状态:“在勤、迟到、缺勤、请假”,二中队状态:“在勤、迟到、缺勤、请假、外勤、备勤”等
要求红框里的内容动态变化,可以实现自动换行

2.实现效果展示

3.实现代码

自定义组件代码如下:

package com.zh.housekeeping.common.widget

import android.content.Context
import android.util.AttributeSet
import android.widget.RadioGroup
import com.zh.housekeeping.R

/**
 * Desc
 * Author ZY
 * Date 2021/11/6 18:22
 */
class FlowRadioGroup : RadioGroup 

    constructor(context: Context) : super(context) 
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) 

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) 
        //获取最大宽度
        val maxWidth = MeasureSpec.getSize(widthMeasureSpec)
        //获取Group中的Child数量
        val childCount = childCount
        //设置Group的左边距,下面也会使用x计算每行所占的宽度
        var x = 0
        //设置Group的上边距,下面也会使用y计算Group所占的高度
        var y = 30

        //设置Group的行数
        var row = 0
        for (index in 0 until childCount) 
            val child = getChildAt(index)
            if (child.visibility != GONE) 
                child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED)
                //重新计算child的宽高
                var width = child.measuredWidth
                val height = child.measuredHeight
                //添加到X中,(width+10) 设置child左边距
                x += width + resources.getDimension(R.dimen.dp_12).toInt()
                //行数*child高度+这次child高度=现在Group的高度,(height + 10)设置child上边距
                y = row * (height + 20) + (height + 20)
                //当前行宽X大于Group的最大宽度时,进行换行
                if (x > maxWidth) 
                    //当index不为0时,进行row++,防止FirstChild出现大于maxWidth时,提前进行row++
                    if (index != 0) row++
                    //child的width大于maxWidth时,重新设置child的width为最大宽度
                    if (width >= maxWidth) 
                        width = maxWidth - 30
                    
                    //重新设置当前X
                    x = width + 20
                    //重新设置现在Group的高度
                    y = row * (height + 20) + (height + 20)
                
            
        
        // 设置容器所需的宽度和高度
        setMeasuredDimension(maxWidth, y)
    

    override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) 
        val childCount = childCount
        val maxWidth = r - l
        var x = 10
        var y = 0
        var row = 0
        for (i in 0 until childCount) 
            val child = getChildAt(i)
            if (child.visibility != GONE) 
                var width = child.measuredWidth
                val height = child.measuredHeight
                x += width + resources.getDimension(R.dimen.dp_12).toInt()
                y = row * (height + 20) + (height + 20)
                if (x > maxWidth) 
                    if (i != 0) row++
                    if (width >= maxWidth) 
                        width = maxWidth - 30
                    
                    x = width + 10 + resources.getDimension(R.dimen.dp_12).toInt()
                    y = row * (height + 20) + (height + 20)
                
                child.layout(x - width, y - height, x, y)
            
        
    

以上是关于关于android radioButton换行/摆放的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于Android中fragment的管理

自定义可自动换行的RadioButton组件

自定义可自动换行的RadioButton组件

自定义可自动换行的RadioButton组件

自定义可自动换行的RadioButton组件

求 android RadioButton属性详解