android中的多行单选按钮?

android中的多行单选按钮?,android,radio-button,Android,Radio Button,我在多行中使用单选按钮时遇到问题 这是我的xml <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <RadioGroup android:layout_width="fill

我在多行中使用单选按钮时遇到问题

这是我的xml

           <RadioGroup android:layout_width="fill_parent"
               android:layout_height="wrap_content"
                android:orientation="vertical"
                 >
  <RadioGroup android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
         >
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:id="@+id/radio_one0Id"
          android:textSize="13sp"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
       />
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
            android:textSize="13sp"
          android:text="5%" 
          android:id="@+id/radio_one5Id"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
         />
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="10%" 
          android:textSize="13sp"
          android:layout_weight="1"
          android:id="@+id/radio_one10Id"
          android:onClick="oneRadioButtonClicked"
       />
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="20%" 
          android:layout_weight="1"
          android:textSize="13sp"
          android:onClick="oneRadioButtonClicked"
          android:id="@+id/radio_one20Id"
         />
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="35%" 
          android:id="@+id/radio_one35Id"
          android:textSize="13sp"
          android:onClick="oneRadioButtonClicked"
          android:layout_weight="1"
       />
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="50%" 
          android:textSize="13sp"
          android:id="@+id/radio_one50Id"
          android:onClick="oneRadioButtonClicked"
          android:layout_weight="1"
         />

      </RadioGroup>

        <RadioGroup android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
         <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="65%" 
          android:textSize="13sp"
          android:id="@+id/radio_one65Id"
          android:onClick="oneRadioButtonClicked"
          android:layout_weight="1"
       />
      <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="75%" 
          android:textSize="13sp"
          android:layout_weight="1"
          android:id="@+id/radio_one75Id"
          android:onClick="oneRadioButtonClicked"
         />
       <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="85%" 
          android:textSize="13sp"
          android:id="@+id/radio_one85Id"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
         />
        <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
         android:textSize="13sp"
          android:text="95%" 
          android:id="@+id/radio_one95Id"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
         />
         <RadioButton
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="100%" 
          android:id="@+id/radio_one100Id"
          android:textSize="13sp"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
         />
                       </RadioGroup>
      </RadioGroup>
这看起来像


它将选择两行中的两个按钮,我希望它只选择这些行中的一个按钮,感谢您的帮助

放置一个垂直方向的放射组,并添加两个线性布局:

           <RadioGroup android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:orientation="vertical"
              >

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_weight="1" >

      <RadioButton
          android:id="@+id/radio_one0Id"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
          android:textSize="13sp" />

      <RadioButton
          android:id="@+id/radio_one5Id"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
          android:text="5%"
          android:textSize="13sp" />

      <RadioButton
          android:id="@+id/radio_one10Id"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
          android:text="10%"
          android:textSize="13sp" />

      <RadioButton
          android:id="@+id/radio_one20Id"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
          android:text="20%"
          android:textSize="13sp" />

      <RadioButton
          android:id="@+id/radio_one35Id"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
          android:text="35%"
          android:textSize="13sp" />

      <RadioButton
          android:id="@+id/radio_one50Id"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:onClick="oneRadioButtonClicked"
          android:text="50%"
          android:textSize="13sp" />

  </LinearLayout>

     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_weight="1"
         android:orientation="horizontal" >

         <RadioButton
             android:id="@+id/radio_one65Id"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:onClick="oneRadioButtonClicked"
             android:text="65%"
             android:textSize="13sp" />

         <RadioButton
             android:id="@+id/radio_one75Id"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:onClick="oneRadioButtonClicked"
             android:text="75%"
             android:textSize="13sp" />

         <RadioButton
             android:id="@+id/radio_one85Id"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:onClick="oneRadioButtonClicked"
             android:text="85%"
             android:textSize="13sp" />

         <RadioButton
             android:id="@+id/radio_one95Id"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:onClick="oneRadioButtonClicked"
             android:text="95%"
             android:textSize="13sp" />

         <RadioButton
             android:id="@+id/radio_one100Id"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:onClick="oneRadioButtonClicked"
             android:text="100%"
             android:textSize="13sp" />

     </LinearLayout>

  </RadioGroup>

通过四处搜索,似乎没有办法做到这一点, 这意味着您必须手动实现此布局行为。两种可能的选择是:

  • 创建RadioGroup的副本以扩展不同的布局,或者至少允许您动态控制它

  • 实现您自己的自定义布局以替换扩展您选择的布局的RadioGroup,并实现OnClickListener。有一个很好的例子

  • 这对我有用。 第一行(NameRadioGroup 2.clearCheck();)清除另一个Radiogroup,第二行在选中的按钮中添加复选标记

    public void oneRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();
    
    switch(view.getId()) {
        case R.id.radio_one0Id: {  
            one = "0";      
            NameRadioGroupe2.clearCheck();
            NameRadioGroupe1.check(view.getId());
            break;
        }
                break;
        case R.id.radio_one5Id: {
            NameRadioGroupe2.clearCheck();
            NameRadioGroupe1.check(view.getId());          
            one = "5";
            break;
            }
            .
            .
            .
            .
            .
                   case R.id.radio_one65Id: {
            NameRadioGroupe1.clearCheck();
            NameRadioGroupe2.check(view.getId());          
            one = "65";
            break;
            }
        case R.id.radio_one75Id: {
            NameRadioGroupe1.clearCheck();
            NameRadioGroupe2.check(view.getId());          
            one = "75";
            break;
            }
            .
            .
            .
            .
            .
    

    制作多行单选按钮的一种简单方法是使用库。它支持任意多的行和列

    使用方法很简单: 在项目的build.gradle文件中添加:

    allprojects {
        repositories {
            ...
            maven { 
                url "https://jitpack.io"
            }
            ...
        }
    }
    
    dependencies {
        ...
        compile 'com.github.Gavras:MultiLineRadioGroup:v1.0.0.6'
        ...
    }
    
    在应用程序或模块的build.gradle文件中添加:

    allprojects {
        repositories {
            ...
            maven { 
                url "https://jitpack.io"
            }
            ...
        }
    }
    
    dependencies {
        ...
        compile 'com.github.Gavras:MultiLineRadioGroup:v1.0.0.6'
        ...
    }
    
    您可以使用xml中的字符串数组资源创建视图,如下所示:

    在布局的XML中添加:

    <com.whygraphics.multilineradiogroup.MultiLineRadioGroup xmlns:multi_line_radio_group="http://schemas.android.com/apk/res-auto"
            android:id="@+id/main_activity_multi_line_radio_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            multi_line_radio_group:default_button="button_2"
            multi_line_radio_group:max_in_row="3"
            multi_line_radio_group:radio_buttons="@array/radio_buttons" />
    

    我也在想同样的事情

    我最后做的是在他们自己的线性布局中添加多个放射组。当从另一个radiobutton组选择一个radiobutton到当前选中的radiobutton以确保不再选择第一个radiobutton时,我为radiobuttons添加了。Checked=false。单击函数。然后,因为一开始我遇到了错误,有时新单击的单选按钮无法检查,所以我在实际单选按钮中添加了.Checked=true

    我的XML

    <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:weightSum="3"
                android:padding="10dp">
                <RadioGroup
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:weightSum="3"
                    style="@style/radios"
                    android:orientation="horizontal">
                    <RadioButton
                        android:id="@+id/rad1"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        style="@style/radios"
                        android:text="1"
                        android:checked="true" />
                    <RadioButton
                        android:id="@+id/rad2"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        style="@style/radios"
                        android:text="2" />
                    <RadioButton
                        android:id="@+id/rad3"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        style="@style/radios"
                        android:text="3" />
                </RadioGroup>
            </LinearLayout>
            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:weightSum="3"
                android:padding="10dp">
                <RadioGroup
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:weightSum="3"
                    style="@style/radios"
                    android:orientation="horizontal">
                    <RadioButton
                        android:id="@+id/rad4"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        style="@style/radios"
                        android:text="4" />
                    <RadioButton
                        android:id="@+id/rad5"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        style="@style/radios"
                        android:text="5" />
                </RadioGroup>
            </LinearLayout>
    
    
    
    然后是我的C#

    var radio1=FindViewById(Resource.Id.rad1);
    var radio2=FindViewById(Resource.Id.rad2);
    var radio3=FindViewById(Resource.Id.rad3);
    var radio4=FindViewById(Resource.Id.rad4);
    var radio5=FindViewById(Resource.Id.rad5);
    radio1.单击+=委派
    {
    radio2.Checked=假;
    radio3.选中=错误;
    radio4.选中=错误;
    无线电5.已检查=错误;
    radio1.选中=正确;
    };
    radio2.单击+=委派
    {
    radio1.选中=错误;
    radio3.选中=错误;
    radio4.选中=错误;
    无线电5.已检查=错误;
    radio2.选中=正确;
    };
    radio3.单击+=委派
    {
    radio1.选中=错误;
    radio2.Checked=假;
    radio4.选中=错误;
    无线电5.已检查=错误;
    radio3.选中=正确;
    };
    收音机4.单击+=委派
    {
    radio1.选中=错误;
    radio2.Checked=假;
    radio3.选中=错误;
    无线电5.已检查=错误;
    radio4.选中=正确;
    };
    收音机5.单击+=委派
    {
    radio1.选中=错误;
    radio2.Checked=假;
    radio3.选中=错误;
    radio4.选中=错误;
    radio5.已检查=正确;
    };
    

    灵长类动物,但它对我有效。

    我对此进行了大量研究,最终找到了解决方案。如果您想要这样的东西:

    首先,您需要下载/创建如下新类:,因为RadioGroup默认使用LinearLayout。现在您有了一个使用RelativeLayout的RadioGroup。剩下的唯一一件事就是通过使用一个简洁的小技巧按百分比分隔单选按钮(就像weightSum一样,只是在RelativeLayout中没有weightSum,只有LinearLayout):

    <rs.cdl.attendance.UI.RelativeRadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
    
        <View
            android:id="@+id/strut"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerHorizontal="true" />
    
        <RadioButton
            android:id="@+id/start_radio_button"
            android:layout_alignRight="@id/strut"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Start" />
    
        <RadioButton
            android:id="@+id/finish_radio_button"
            android:layout_alignLeft="@id/strut"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Finish" />
    
        <RadioButton
            android:id="@+id/pause_radio_button"
            android:layout_alignRight="@id/strut"
            android:layout_alignParentLeft="true"
            android:layout_below="@id/start_radio_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Pause" />
    
        <RadioButton
            android:id="@+id/continue_radio_button"
            android:layout_alignLeft="@id/strut"
            android:layout_alignParentRight="true"
            android:layout_below="@id/finish_radio_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Continue" />
    
    </rs.cdl.attendance.UI.RelativeRadioGroup>
    
    
    
    perfect and simple solution此解决方案没有解决原始帖子中的一个要求,即一次只能从任何一行中选择一个按钮:“它将选择两行中的两个按钮,我希望它只选择这些行中的一个按钮”。单选按钮必须是放射组的直接子项,才能被视为放射组的一部分。它不起作用。请检查是否应该接受。这也和我尝试过的其他方法一样,没有包装。您可以使用
    max\u in\u row
    来固定按钮的数量。这仅适用于手动确定行数的情况。它不像Flexbox那样自动换行。这是本页中最好的答案之一+链接为1
                var radio1 = FindViewById<RadioButton>(Resource.Id.rad1);
                var radio2 = FindViewById<RadioButton>(Resource.Id.rad2);
                var radio3 = FindViewById<RadioButton>(Resource.Id.rad3);
                var radio4 = FindViewById<RadioButton>(Resource.Id.rad4);
                var radio5 = FindViewById<RadioButton>(Resource.Id.rad5);
    
                radio1.Click += delegate
                {
                    radio2.Checked = false;
                    radio3.Checked = false;
                    radio4.Checked = false;
                    radio5.Checked = false;
                    radio1.Checked = true;
                };
    
                radio2.Click += delegate
                {
                    radio1.Checked = false;
                    radio3.Checked = false;
                    radio4.Checked = false;
                    radio5.Checked = false;
                    radio2.Checked = true;
                };
    
                radio3.Click += delegate
                {
                    radio1.Checked = false;
                    radio2.Checked = false;
                    radio4.Checked = false;
                    radio5.Checked = false;
                    radio3.Checked = true;
                };
    
                radio4.Click += delegate
                {
                    radio1.Checked = false;
                    radio2.Checked = false;
                    radio3.Checked = false;
                    radio5.Checked = false;
                    radio4.Checked = true;
                };
    
                radio5.Click += delegate
                {
                    radio1.Checked = false;
                    radio2.Checked = false;
                    radio3.Checked = false;
                    radio4.Checked = false;
                    radio5.Checked = true;
                };
    
    <rs.cdl.attendance.UI.RelativeRadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
    
        <View
            android:id="@+id/strut"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerHorizontal="true" />
    
        <RadioButton
            android:id="@+id/start_radio_button"
            android:layout_alignRight="@id/strut"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Start" />
    
        <RadioButton
            android:id="@+id/finish_radio_button"
            android:layout_alignLeft="@id/strut"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Finish" />
    
        <RadioButton
            android:id="@+id/pause_radio_button"
            android:layout_alignRight="@id/strut"
            android:layout_alignParentLeft="true"
            android:layout_below="@id/start_radio_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Pause" />
    
        <RadioButton
            android:id="@+id/continue_radio_button"
            android:layout_alignLeft="@id/strut"
            android:layout_alignParentRight="true"
            android:layout_below="@id/finish_radio_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Continue" />
    
    </rs.cdl.attendance.UI.RelativeRadioGroup>