我只希望选择一个单选按钮,也就是说,不允许多项选择

时间:2019-03-16 11:52:37

标签: android android-layout android-xml android-radiobutton android-radiogroup

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

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <LinearLayout
            android:id="@+id/public_line"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
        <TextView
            android:id="@+id/Public"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="6"
            android:text="Public"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="24dp"
            android:textSize="20dp"
            android:textColor="@android:color/black"/>
        <RadioButton
            android:id="@+id/public_button"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:layout_marginTop="24dp"
            />

        </LinearLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="8dp"
            android:text="league is visible to the public,
                          that is, anyone can join your league"
            />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/Private"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="6"
                android:text="Private"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="24dp"
                android:textSize="20dp"
                android:textColor="@android:color/black"/>
            <RadioButton
                android:id="@+id/private_button"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginRight="16dp"
                android:layout_marginTop="24dp"
                />

        </LinearLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="8dp"
            android:text="Only people with invite code can join"
            />
    </RadioGroup>
    <TextView
        android:layout_alignParentBottom="true"
        android:background="@drawable/orange_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Done"
        android:padding="16dp"
        android:textSize="20dp"
        android:textColor="@android:color/black"
        android:layout_weight="1"
        android:gravity="center"/>
</RelativeLayout>

这是我的布局。它允许选择两个单选按钮。有人可以帮我找出问题所在吗?据我所知,问题在于单选按钮不是直接位于单选按钮组中,而是应该如何将它们直接容纳在单选按钮组中以获得相同的布局。还有其他解决问题的方法

4 个答案:

答案 0 :(得分:2)

您的radioButton一定是RadioGroup这样的子对象

does-ok

但是在您的情况下,它是linearlayout的子元素,每个单选按钮都可以选择

答案 1 :(得分:0)

RadioButton必须是RadioGroup的直接子代,才能使其自动管理单个选择。
从您的布局看来,您似乎试图在RadioButton的侧面显示文本。为此,您只需在android:text上设置属性RadioButton,而无需使用其他TextView

答案 2 :(得分:0)

只需尝试一下

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/radio1">
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/Public"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Public"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="24dp"
            android:textSize="20dp"
            android:textColor="@android:color/black"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>

        <RadioButton
            android:id="@+id/public_button"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:layout_marginTop="24dp"
            android:checked="true"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="8dp"
            android:text="league is visible to the public,
                      that is, anyone can join your league"
            app:layout_constraintTop_toBottomOf="@+id/Public"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:id="@+id/text1"
            />
    <TextView
            android:id="@+id/Private1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="6"
            android:text="Private"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="24dp"
            android:textSize="20dp"
            android:textColor="@android:color/black"
            app:layout_constraintTop_toBottomOf="@+id/text1"
            app:layout_constraintStart_toStartOf="parent"/>

        <RadioButton
            android:id="@+id/private_button2"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:layout_marginTop="24dp"
            android:checked="true"
            app:layout_constraintTop_toBottomOf="@+id/text1"
            app:layout_constraintEnd_toEndOf="parent"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="8dp"
            android:text="Only people with invite code can join"
            app:layout_constraintTop_toBottomOf="@+id/Private1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>

    </android.support.constraint.ConstraintLayout>
</RadioGroup>

答案 3 :(得分:0)

有两种方法可以实现您的解决方案

首先是RadioButtons直接设置RadioGroup的子项,如下所示

<RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <RadioButton
            android:id="@+id/public_button"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:layout_marginTop="24dp"
            />


         <RadioButton
                android:id="@+id/private_button"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginRight="16dp"
                android:layout_marginTop="24dp"
                />
</RadioGroup>

第二个解决方案是,如果您未将RadioButtons设置为RadioGroup的直接子代,则应将如下代码添加到Java文件中:

 publicButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    publicButton.setChecked(true);
                    privateButton.setChecked(false);
                }
            }
        });
privateButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked){
                            publicButton.setChecked(false);
                            privateButton.setChecked(true);
                    }
                }
            });

其中privateButton和publicButton是单选按钮。

希望它对您有用。