web-dev-qa-db-fra.com

Gestion de la disposition à l'intérieur d'un radiogroupe à orientation horizontale

J'utilise un objet TableLayout avec TableRows comme activité principale.

À l'intérieur de TableLayout se trouve un groupe de radio contenant 2 boutons radio à l'intérieur de l'activité (le groupe de radio étant à l'intérieur d'une rangée de tableau). Je veux pouvoir aligner le bouton radio le plus à droite sur l'écran Edge de droite, de sorte que "l'écart" se situe entre le bouton radio gauche et le bouton droit (au lieu d'être après le bouton radio de droite). c'est à dire.

Donc au lieu d'avoir
| écart (x) (x) |
J'aurai
| (x) espace (x) |

où (x) sont les boutons radio et | sont les bords de l'écran

Je peux utiliser la gravité (center_horizontal) pour placer les deux boutons au milieu (i.e. | gap (x) (x) gap |), mais il me semble impossible de les séparer comme je le souhaite, comme indiqué précédemment

17
deteego

Tout ce dont vous avez besoin pour espacer uniformément un nombre arbitraire de boutons horizontalement sur l’écran:

  1. RadioGroup doit avoir Android:orientation="horizontal" & Android:layout_width="fill_parent"
  2. Chaque bouton radio doit avoir Android:layout_weight="1", à l'exception du bouton le plus à droite (pour l'aligner sur le bord droit de l'écran)!

Landscape screenshot

Cela m'a pris des heures pour comprendre.

Voici un exemple de code, avec en prime deux étiquettes de texte et les bords droit et gauche de l'écran, pour une application de sondage.

<RadioGroup
    Android:id="@+id/radio_group"
    Android:orientation="horizontal"
    Android:layout_below="@id/question" 
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:visibility="gone"
>
    <RadioButton
        Android:id="@+id/strong_disagree_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:text="1"
    />
    <RadioButton
        Android:id="@+id/disagree_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:text="@string/disagree"
    />
    <RadioButton
        Android:id="@+id/neutral_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:text="@string/neutral"
    />
    <RadioButton
        Android:id="@+id/agree_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:text="@string/agree"
    />
    <RadioButton
        Android:id="@+id/strong_agree_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="5"
    />
</RadioGroup>
<TextView
    Android:id="@+id/disagree_label"
    Android:text="@string/strongly_disagree_txt"
    Android:layout_below="@id/radio_group" 
    style="@style/TextAppearance"
    Android:visibility="gone"
    />
<TextView
    Android:id="@+id/agree_label"
    Android:text="@string/strongly_agree_txt"
    Android:layout_below="@id/radio_group" 
    Android:layout_alignParentRight="true" 
    style="@style/TextAppearance"
    Android:layout_width="wrap_content"
    Android:visibility="gone"
    />
32
Lucy

Trouvé ma solution. Une combinaison de poids et de gravité et d'élimination des marges. Le groupe radio peut avoir layout_width = "fill_parent". Layout_weight = "1" doit être attribué à chaque bouton radio, mais la largeur de layout_width de chaque bouton radio doit toujours être spécifiée pour remplacer la valeur par défaut de "37", qui est la largeur d'image du bouton radio par défaut.

        <RadioGroup Android:id="@+id/overall"
        Android:layout_width="fill_parent" Android:layout_height="80dp"
        Android:gravity="center"
        Android:orientation="horizontal">

Le premier bouton devrait avoir:

                Android:layout_weight="1"
            Android:layout_gravity="center|left"

Le dernier bouton devrait avoir:

            Android:layout_gravity="center|right"

Remarque: tous les boutons ont layout_gravioty défini, mais aucun paramètre layout_weight pour le bouton le plus à droite!

9
capn

Si je comprends bien votre question, vous pouvez également essayer le code suivant dans RadioGroup:

<ToggleButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" />

<View
    Android:id="@+id/view1"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_weight="1" />

<ToggleButton
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" />
0
alcsan

Avez-vous déjà trouvé une solution à cela? Ma solution intermédiaire pourrait aider, mais ce n'est pas l'image complète pour moi. J'ai pu le faire en définissant des largeurs spécifiques, mais cela ne permet pas à la vue de redimensionner pour s'adapter à la largeur de l'écran:

    <RelativeLayout  
    Android:id="@+id/overall_layout"
    Android:layout_width="290dp" Android:layout_height="wrap_content">

    <RadioGroup Android:id="@+id/overall"
        Android:layout_width="fill_parent" Android:layout_height="wrap_content"
        Android:orientation="horizontal">
        <RadioButton Android:id="@+id/overall_1" Android:tag="1"
            Android:button="@drawable/radio_1"
            Android:layout_width="50dp"
            Android:layout_marginRight="10dp"
            Android:layout_height="wrap_content"></RadioButton>
        <RadioButton Android:id="@+id/overall_2" Android:tag="2"
            Android:button="@drawable/radio_2"
            Android:layout_width="50dp"
            Android:layout_marginRight="10dp"
            Android:layout_height="wrap_content"></RadioButton>
        <RadioButton Android:id="@+id/overall_3" Android:tag="3"
            Android:button="@drawable/radio_3"
            Android:layout_width="50dp"
            Android:layout_marginRight="10dp"
            Android:layout_height="wrap_content"></RadioButton>
        <RadioButton Android:id="@+id/overall_4" Android:tag="4"
            Android:button="@drawable/radio_4"
            Android:layout_width="50dp"
            Android:layout_marginRight="10dp"
            Android:layout_height="wrap_content"></RadioButton>
        <RadioButton Android:id="@+id/overall_5" Android:tag="5"
            Android:button="@drawable/radio_5"
            Android:layout_width="50dp"
            Android:layout_height="wrap_content"></RadioButton>
    </RadioGroup>
    <TextView Android:text="left" Android:id="@+id/left"
        Android:layout_below="@id/overall"
        Android:layout_alignParentLeft="true"
        Android:layout_width="wrap_content" Android:layout_height="wrap_content"></TextView>
    <TextView Android:text="right" Android:id="@+id/right"
        Android:layout_below="@id/overall"
        Android:layout_alignParentRight="true"
        Android:layout_width="wrap_content" Android:layout_height="wrap_content"></TextView>
    </RelativeLayout>

Notez qu'il n'y a pas de marge sur le dernier bouton.

J'essaie d'avoir 5 boutons personnalisés dans un groupe de radio, avec le premier justifié à gauche et le dernier justifié à droite. Les boutons ont exactement 50 pixels de large et je ne veux pas de texte associé aux boutons individuellement. Les 2 textes ci-dessous sont à gauche et à droite dans la mise en page relative. L'utilisation de "layout_gravity" n'a pas d'effet et "layout_weight" ajoute un remplissage à la droite de chaque bouton, ce qui entraîne la suppression du bouton le plus à droite.

Beaucoup de cheveux tirant sur cela.

0
capn