Я хочу, чтобы была выбрана только одна из переключателей, то есть множественный выбор не должен быть разрешен - PullRequest
0 голосов
/ 16 марта 2019
<?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 ]

2 голосов
/ 16 марта 2019

Ваши радиокнопки должны быть точно дочерними по отношению к RadioGroup, как это

<RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true" />

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

 </RadioGroup>

Но в вашем случае это дочерний элемент linearlayout, и каждая радиокнопка может быть выбрана

0 голосов
/ 20 марта 2019

Есть два способа достижения ваших решений

Первый - это то, что 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 являются переключателями.

Я надеюсь, что это работает для вас.

0 голосов
/ 18 марта 2019

просто попробуйте это

<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>
0 голосов
/ 16 марта 2019

RadioButton должны быть прямыми потомками RadioGroup, чтобы он автоматически управлял единичным выбором.
Из вашего макета кажется, что вы пытаетесь отобразить текст в сторону ваших RadioButton с. Для этого вы можете просто установить атрибут android:text на RadioButton, не нужно использовать дополнительные TextView s.

...