17

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

这是我的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>

这是代码

public void oneRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    switch(view.getId()) {
        case R.id.radio_one0Id:
            if (checked)
                one = "0";
            break;
        case R.id.radio_one5Id:
            if (checked)
                one = "5";
            break;
        case R.id.radio_one10Id:
            if (checked)
                one = "10";
            break;
        case R.id.radio_one20Id:
            if (checked)
                one = "20";
            break;
        case R.id.radio_one35Id:
            if (checked)
                one = "35";
            break;
        case R.id.radio_one50Id:
            if (checked)
                one = "50";
            break;
        case R.id.radio_one65Id:
            if (checked)
                one = "65";
            break;
        case R.id.radio_one75Id:
            if (checked)
                one = "75";
            break;
        case R.id.radio_one85Id:
            if (checked)
                one = "85";
            break;
        case R.id.radio_one95Id:
            if (checked)
                one = "95";
            break;
        case R.id.radio_one100Id:
            if (checked)
                one = "100";
            break;
         default:
             System.out.println("default");
    }
}

这看起来像在此处输入图像描述

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

4

6 回答 6

15

放置一个垂直方向的radiogroup并添加两个LinearLayouts:

           <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>
于 2013-06-23T07:39:16.297 回答
8

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

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

  2. 实现您自己的自定义布局以替换 RadioGroup 扩展您选择的布局,并实现 OnClickListener。有一个很好的例子How to group a 3x3 grid of radio buttons?.

于 2013-06-23T07:44:05.423 回答
8

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

在此处输入图像描述

首先,您需要下载/创建一个像这样的新类:link,因为 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>
于 2019-01-18T10:33:25.403 回答
5

这对我有用。第一行 (NameRadioGroupe2.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;
        }
        .
        .
        .
        .
        .
于 2014-11-18T19:37:32.800 回答
1

我试图解决同样的问题。

我最终做的是在他们自己的 LinearLayouts 中添加多个 RadioGroups。当从另一个 RadioGroup 选择一个单选按钮到当前选择的单选按钮以确保不再选择第一个 RadioGroup 按钮时,我将 .Checked = false 添加到单选按钮 .Click 功能。然后因为我一开始遇到了一些错误,有时新点击的单选按钮不会检查,所以我在实际的单选按钮中添加了一个 .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<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;
            };

原始的,但它对我有用。

于 2018-04-21T18:51:27.610 回答
0

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

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

allprojects {
    repositories {
        ...
        maven { 
            url "https://jitpack.io"
        }
        ...
    }
}

在您的应用程序或模块的 build.gradle 文件中添加:

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" />

并在 arrays.xml 添加:

<string-array name="radio_buttons">
        <item>button_1</item>
        <item>button_2</item>
        <item>button_3</item>
        <item>button_4</item>
        <item>button_5</item>
</string-array>

或以编程方式添加它们:

mMultiLineRadioGroup.addButtons("button to add 1", "button to add 2", "button to add 3");
于 2017-12-13T02:57:24.290 回答