web-dev-qa-db-de.com

Android-Funkgruppe, Teiler zwischen Funkknöpfen

Gibt es eine einfache Möglichkeit, eine Trennlinie zwischen RadioButtons und RadioGroup einzufügen? Ich habe versucht, das Attribut divider xml zu verwenden, und es scheint nicht zu funktionieren. Falls relevant, enthält die RadioGroup in meinem Layout keine untergeordneten Ansichten. Ich füge die RadioButtons programmgesteuert hinzu.

EDIT: Problem behoben. Sie können Ansichten neben RadioButton innerhalb von RadioGroup in der XML-Datei hinzufügen. In meinem Fall können Sie dies auch programmgesteuert tun, achten Sie jedoch auf Ihre Layoutparameter. Akki hatte die richtige Idee und diese funktionierte für mich:

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);
}
20
Karakuri
<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>

Das wird für dich funktionieren. Und ich bin wirklich gespannt, wie Sie die Ansicht in die Gruppenansicht einfügen. Das sollte Klassenausnahmen verursachen, oder?

17
smilingky

Hier ist eine Problemumgehung:

Erstellen Sie zunächst ein Shape Drawable als Ihren Teiler. Hier ist ein Beispiel:

<?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>

Dies ist nur ein einfacher schwarzer Rand. Legen Sie es in Ihren DrawableOrdner und nennen Sie es so etwas wie/- custom_divider.xml .

Gehen Sie dann zu Ihrem Layout, das ein RadioGroup verwendet. Verwenden Sie ShapeDrawable als Hintergrund für alle RadioButton (s). Hier ist ein Beispiel:

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

Sie können Ihrer RadioGroup auch ein ShapeDrawable hinzufügen. Es hängt von Ihnen ab, passen Sie es an, wenn Sie es brauchen. :)

Hier ist mein Beispiel einer RadioGroup mit benutzerdefiniertem Rand (mit Eckenradius) und benutzerdefiniertem Teiler ShapeDrawable (s). RadioGroup divider

14
KarenAnne

Erstellen Sie eine Zeichenform, die einen Teiler darstellt ("radio_group_divider" genannt):

<?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>

Verwenden Sie dieses Zeichen als "Teiler" in der RadioGroup:

<RadioGroup
        ...
        Android:divider="@drawable/radio_group_divider"
        Android:showDividers="middle"
        ...>
</RadioGroup>
6
David

Wenn Sie RadioGroup programmgesteuert erstellen, müssen Sie Teiler auch programmgesteuert festlegen. Du kannst es so machen:

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()));

...

Hinweis: Dieser Codeteil arbeitet in einem Fragment. Wenn Sie es also in eine Aktivität einfügen möchten, müssen Sie es ändern, indem Sie "getActivity ()" durch "YourActivityName.this" ändern.

0