如何安排2 * 2无线电组

时间:2015-02-17 12:29:23

标签: android android-tablelayout android-relativelayout android-radiogroup

我正在创建一个应用程序,我想在2 * 2单选按钮中设计选项。为此,我正在做以下事情,但得到" android.widget.RelativeLayout无法转换为android.widget。单选按钮"错误

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<TableRow>
<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>
</TableRow>


<TableRow>
<TextView android:id="@+id/textMessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_marginTop="100dp"
    android:gravity="center|left"/>
</TableRow>

<TableRow>


<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/group"
    android:layout_marginLeft="25dp"
    android:orientation="horizontal"
    android:layout_span="2"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RadioButton android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

        <RadioButton android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:layout_toRightOf="@id/btn1"/>

        <RadioButton android:id="@+id/btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:layout_below="@id/btn1"   />

        <RadioButton android:id="@+id/btn4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:layout_below="@id/btn2"
            android:layout_toRightOf="@id/btn3"/>
    </RelativeLayout>
  </RadioGroup>

  </TableRow>

    <Button android:id="@+id/submitbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        android:visibility="gone"
        android:layout_below="@id/group" />

    <TextView android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/submitbtn"/>

 </TableLayout>

请帮助我从早上起就被困住了。

3 个答案:

答案 0 :(得分:0)

1.删除radiogroup。

2.将父布局视为相对

3.根据需要选择4个单选按钮

4.为所有单选按钮编写onclicklistener

5.在单选按钮-1中onclicklistener事件禁用其他按钮并为其他按钮执行此操作(设置检查特定按钮和其他设置未选中)

答案 1 :(得分:0)

首先,这取决于您的需求。但你可以这样做:Juste不使用RadioGroup,而是使用两个LinearLayouts:

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

    <RadioButton android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>

    <RadioButton android:id="@+id/btn2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>
  </LinearLayoutLayout>

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

    <RadioButton android:id="@+id/btn3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"  />

    <RadioButton android:id="@+id/btn4"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>
</LinearLayoutLayout>

然后您可以以编程方式引用它并取消选择所有其他按钮(如果按下一个按钮):

    yourFirstRadioButton.setOnClickListener(new OnClickListener(){

      @Override
      public void onClick(View view){

       YourSecondRadioButton.setChecked(false);
       YourThirdRadiobutton.setChecked(false);
       YourFourthRadioButton.setChecked(false);

      }

    });

您必须为所有单选按钮执行此操作。这只是一个简单的例子,你可以用更好的方式来做,例如使用for循环。例如,在创建RadioButtons之后,初始化RadioButtons数组:

 private RadioButton[] radioButtons;
初始化所有radioButtons后

初始化:

 radioButtons = {radioButton1,radioButton2,radioButton3,radioButton4};

然后,创建一个setSelected(RadioButton按钮)方法:

   private void setSelected(RadioButton button){

   for(int i=0;i<radioButtons.length;i++){

      if(radioButtons[i]!=button){

          radioButtons[i].setChecked(false);
      }
    }

   }

并在你的onClick()中调用它:

  yourFirstRadioButton.setOnClickListener(new OnClickListener(){

      @Override
      public void onClick(View view){

       setSelected(yourFirstRadioButton);

      }

    });

我可能在这里有一些错误的编码,因为我现在无法测试它,这里没有IDE。但是试试看,如果它不起作用就回来。

答案 2 :(得分:0)

删除Radio Group,为RadioButtons实现onClickListener并维护活动的单选按钮ID。像:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<RadioButton
    android:id="@+id/btn1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClickButton" />

<RadioButton
    android:id="@+id/btn2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/btn1"
    android:onClick="onClickButton" />

<RadioButton
    android:id="@+id/btn3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/btn1"
    android:onClick="onClickButton" />

<RadioButton
    android:id="@+id/btn4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/btn2"
    android:layout_toRightOf="@id/btn3"
    android:onClick="onClickButton" />

</RelativeLayout> 

然后,在你的活动中实现了RadioButtons的OnClick属性中提到的“onClickButton”方法:

private RadioButton checkedRadioButton;

// OnClick listener for Radio Buttons
public void onClickButton(View view) {
    RadioButton radioButton = (RadioButton) view;
    if (checkedRadioButton != null) {
        checkedRadioButton.setChecked(false);
    }
    radioButton.setChecked(true);
    checkedRadioButton = radioButton;
}

// Get the Active radio button ID
private int getCheckedRadiButtonId() {
   if (checkedRadioButton != null) {
        return checkedRadioButton.getId();
    }
    return 0;
}

U可以使用getCheckedRadiButtonId获取当前活动的radioButton Id。