Grupo de radio de Android, divisor entre botones de radio

¿Hay una manera simple de agregar un divisor entre RadioButtons dentro de una RadioGroup? He intentado usar el divider xml y parece que no funciona. En caso de que sea relevante, el RadioGroup en mi diseño no contiene vistas secundarias; estoy agregando el RadioButtons programáticamente.

EDITAR: Problema resuelto. Puede agregar vistas además de RadioButton dentro RadioGroup en el xml. En mi caso, también puede hacerlo mediante programación, pero tenga cuidado con los parámetros de diseño. Akki tuvo la idea correcta, y esto funcionó para mí:

for (int i = 0; i < items.size(); i++) {
    if (i > 0) {
        // add a divider with height of 1 pixel
        View v = new View(this);
        v.setLayoutParams(new RadioGroup.LayoutParams(LayoutParams.MATCH_PARENT, 1));
        v.setBackgroundColor(android.R.color.darker_gray);
        mRadioGroup.addView(v);
    }
    RadioButton rb = new RadioButton(this);
    /* set other properties ... */

    mRadioGroup.addView(rb);
}

preguntado el 22 de mayo de 12 a las 17:05

Puede ser útil si pudiera proporcionar una imagen de lo que está tratando de hacer. -

El grupo de radio se deriva del diseño lineal, así que cree un objeto de vista y agréguelo después de cada botón de radio, excepto el último. -

mtmurdock: solo necesito una delgada línea horizontal entre cada elemento. Akki: Pensé en eso, pero esperaba que hubiera algo más simple. Parece un caso de uso tan obvio que uno esperaría que Google lo hubiera previsto dentro del marco. -

4 Respuestas

<RadioGroup
    android:id="@+id/location_radio_group"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="?android:attr/dividerHorizontal"
    android:showDividers="middle">
</RadioGroup>

Eso funcionará para ti. Y tengo mucha curiosidad por saber cómo se agrega la vista a la Vista de grupo. Eso debería causar classcastexception, ¿no?

Respondido el 19 de diciembre de 15 a las 09:12

Esto no funciona para mi. No tiene efecto. Pero si defino y asigno mi propia forma para android:divider para RadioGroup (no los botones individuales) en un archivo xml, funciona. ¿Alguien sabe por qué? - Alioshak

(Por cierto, esto no funcionó para mí, hasta que agregué una orientación vertical a mi RadioGroup) - Bertrand

Aquí tienes una solución alternativa:

Primero crea un Forma dibujable como tu separador. Aquí hay un ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
<solid 
    android:color="@color/white" />
<stroke 
    android:width="0.3dp" 
    android:color="@color/black" />
</shape>

Esto es solo un borde negro simple. Póngalo dentro de su carpeta drawable/ y asígnele un nombre como divisor_personalizado.xml.

Luego, vaya a su diseño que usa un Grupo de Radio. Use el ShapeDrawable como fondo para cada uno de los Radiobutton(s). Aquí hay un ejemplo:

<RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:divider="@color/black" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radiogroup_divider"
            android:checked="true"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radiogroup_divider"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radiogroup_divider"
            android:text="RadioButton" />

    </RadioGroup>

También puede agregar un ShapeDrawable a su RadioGroup. Depende de ti, personalízalo si lo necesitas. :)

Aquí está mi ejemplo de un RadioGroup con borde personalizado (con radio de esquina) y divisor personalizado ShapeDrawable(s). Divisor de grupo de radio

Respondido 17 Jul 13, 08:07

Cree una forma dibujable que represente un divisor (llamado "radio_group_divider"):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:width="12dp" />
    <solid android:color="@color/transparent" />
</shape>

Use este dibujable como "divisor" en el RadioGroup:

<RadioGroup
        ...
        android:divider="@drawable/radio_group_divider"
        android:showDividers="middle"
        ...>
</RadioGroup>

Respondido el 24 de Septiembre de 13 a las 14:09

Si crea RadioGroup programáticamente, también debe establecer divisores programáticamente. Puedes hacerlo así:

RadioGroup radioGroup = new RadioGroup(getActivity()); //We create a new radio group
radioGroup.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
radioGroup.setDividerDrawable(getResources().getDrawable(android.R.drawable.divider_horizontal_textfield, getActivity().getTheme()));

...

Nota: Esta parte del código está funcionando en un fragmento. Entonces, si desea incluirlo en una actividad, debe modificarlo cambiando "getActivity ()" con "YourActivityName.this"

Respondido 26 ago 18, 08:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.