web-dev-qa-db-fra.com

Plusieurs rangées de boutons radio dans Android?

J'ai des problèmes pour avoir des boutons radio dans plusieurs rangées

c'est mon xml

           <RadioGroup Android:layout_width="fill_parent"
               Android:layout_height="wrap_content"
                Android:orientation="vertical"
                 >
  <RadioGroup Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
         >
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:id="@+id/radio_one0Id"
          Android:textSize="13sp"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
       />
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
            Android:textSize="13sp"
          Android:text="5%" 
          Android:id="@+id/radio_one5Id"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
         />
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="10%" 
          Android:textSize="13sp"
          Android:layout_weight="1"
          Android:id="@+id/radio_one10Id"
          Android:onClick="oneRadioButtonClicked"
       />
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="20%" 
          Android:layout_weight="1"
          Android:textSize="13sp"
          Android:onClick="oneRadioButtonClicked"
          Android:id="@+id/radio_one20Id"
         />
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="35%" 
          Android:id="@+id/radio_one35Id"
          Android:textSize="13sp"
          Android:onClick="oneRadioButtonClicked"
          Android:layout_weight="1"
       />
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="50%" 
          Android:textSize="13sp"
          Android:id="@+id/radio_one50Id"
          Android:onClick="oneRadioButtonClicked"
          Android:layout_weight="1"
         />

      </RadioGroup>

        <RadioGroup Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:orientation="horizontal">
         <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="65%" 
          Android:textSize="13sp"
          Android:id="@+id/radio_one65Id"
          Android:onClick="oneRadioButtonClicked"
          Android:layout_weight="1"
       />
      <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="75%" 
          Android:textSize="13sp"
          Android:layout_weight="1"
          Android:id="@+id/radio_one75Id"
          Android:onClick="oneRadioButtonClicked"
         />
       <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="85%" 
          Android:textSize="13sp"
          Android:id="@+id/radio_one85Id"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
         />
        <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
         Android:textSize="13sp"
          Android:text="95%" 
          Android:id="@+id/radio_one95Id"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
         />
         <RadioButton
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="100%" 
          Android:id="@+id/radio_one100Id"
          Android:textSize="13sp"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
         />
                       </RadioGroup>
      </RadioGroup>

c'est du code

public void oneRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    switch(view.getId()) {
        case R.id.radio_one0Id:
            if (checked)
                one = "0";
            break;
        case R.id.radio_one5Id:
            if (checked)
                one = "5";
            break;
        case R.id.radio_one10Id:
            if (checked)
                one = "10";
            break;
        case R.id.radio_one20Id:
            if (checked)
                one = "20";
            break;
        case R.id.radio_one35Id:
            if (checked)
                one = "35";
            break;
        case R.id.radio_one50Id:
            if (checked)
                one = "50";
            break;
        case R.id.radio_one65Id:
            if (checked)
                one = "65";
            break;
        case R.id.radio_one75Id:
            if (checked)
                one = "75";
            break;
        case R.id.radio_one85Id:
            if (checked)
                one = "85";
            break;
        case R.id.radio_one95Id:
            if (checked)
                one = "95";
            break;
        case R.id.radio_one100Id:
            if (checked)
                one = "100";
            break;
         default:
             System.out.println("default");
    }
}

cela ressembleraenter image description here

il sélectionnera les deux boutons de 2 rangées, je veux qu'il sélectionne un seul bouton dans ces rangées, merci pour toute aide

13
user2199280

Mettez un radiogroupe avec orientation verticale et ajoutez deux LinearLayouts:

           <RadioGroup Android:layout_width="fill_parent"
               Android:layout_height="wrap_content"
               Android:orientation="vertical"
              >

  <LinearLayout
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content"
      Android:layout_weight="1" >

      <RadioButton
          Android:id="@+id/radio_one0Id"
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
          Android:textSize="13sp" />

      <RadioButton
          Android:id="@+id/radio_one5Id"
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
          Android:text="5%"
          Android:textSize="13sp" />

      <RadioButton
          Android:id="@+id/radio_one10Id"
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
          Android:text="10%"
          Android:textSize="13sp" />

      <RadioButton
          Android:id="@+id/radio_one20Id"
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
          Android:text="20%"
          Android:textSize="13sp" />

      <RadioButton
          Android:id="@+id/radio_one35Id"
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
          Android:text="35%"
          Android:textSize="13sp" />

      <RadioButton
          Android:id="@+id/radio_one50Id"
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_weight="1"
          Android:onClick="oneRadioButtonClicked"
          Android:text="50%"
          Android:textSize="13sp" />

  </LinearLayout>

     <LinearLayout
         Android:layout_width="wrap_content"
         Android:layout_height="match_parent"
         Android:layout_weight="1"
         Android:orientation="horizontal" >

         <RadioButton
             Android:id="@+id/radio_one65Id"
             Android:layout_width="fill_parent"
             Android:layout_height="wrap_content"
             Android:layout_weight="1"
             Android:onClick="oneRadioButtonClicked"
             Android:text="65%"
             Android:textSize="13sp" />

         <RadioButton
             Android:id="@+id/radio_one75Id"
             Android:layout_width="fill_parent"
             Android:layout_height="wrap_content"
             Android:layout_weight="1"
             Android:onClick="oneRadioButtonClicked"
             Android:text="75%"
             Android:textSize="13sp" />

         <RadioButton
             Android:id="@+id/radio_one85Id"
             Android:layout_width="fill_parent"
             Android:layout_height="wrap_content"
             Android:layout_weight="1"
             Android:onClick="oneRadioButtonClicked"
             Android:text="85%"
             Android:textSize="13sp" />

         <RadioButton
             Android:id="@+id/radio_one95Id"
             Android:layout_width="fill_parent"
             Android:layout_height="wrap_content"
             Android:layout_weight="1"
             Android:onClick="oneRadioButtonClicked"
             Android:text="95%"
             Android:textSize="13sp" />

         <RadioButton
             Android:id="@+id/radio_one100Id"
             Android:layout_width="fill_parent"
             Android:layout_height="wrap_content"
             Android:layout_weight="1"
             Android:onClick="oneRadioButtonClicked"
             Android:text="100%"
             Android:textSize="13sp" />

     </LinearLayout>

  </RadioGroup>
9
Boaz Katzir

En cherchant, il ne semble pas y avoir de moyen de le faire, Cela signifie que vous devrez implémenter ce comportement de mise en page manuellement. Deux options possibles sont:

  1. Créez une copie de RadioGroup pour étendre une mise en page différente, ou du moins vous permettre de la contrôler de manière dynamique.

  2. Implémentez votre propre disposition personnalisée pour remplacer RadioGroup qui étend la disposition de votre choix et implémente OnClickListener. Il y a un bon exemple Comment regrouper une grille de boutons radio 3x3? .

7
user1525382

Cela a fonctionné pour moi. La première ligne (NameRadioGroupe2.clearCheck ();) efface l’autre radiogroupe, et la deuxième ligne coche le bouton qui a été coché.

public void oneRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();

switch(view.getId()) {
    case R.id.radio_one0Id: {  
        one = "0";      
        NameRadioGroupe2.clearCheck();
        NameRadioGroupe1.check(view.getId());
        break;
    }
            break;
    case R.id.radio_one5Id: {
        NameRadioGroupe2.clearCheck();
        NameRadioGroupe1.check(view.getId());          
        one = "5";
        break;
        }
        .
        .
        .
        .
        .
               case R.id.radio_one65Id: {
        NameRadioGroupe1.clearCheck();
        NameRadioGroupe2.check(view.getId());          
        one = "65";
        break;
        }
    case R.id.radio_one75Id: {
        NameRadioGroupe1.clearCheck();
        NameRadioGroupe2.check(view.getId());          
        one = "75";
        break;
        }
        .
        .
        .
        .
        .
5
Niels Keiser

Je faisais beaucoup de recherches à ce sujet et j'ai finalement trouvé une solution. Si vous voulez quelque chose comme ça:

 enter image description here

Vous devez d’abord télécharger/créer une nouvelle classe comme celle-ci: link , car RadioGroup utilise LinearLayout par défaut. Vous avez maintenant un groupe Radio qui utilise RelativeLayout. La seule chose qui reste à faire est de séparer les boutons radio par pourcentage (comme avec weightSum, c'est simplement que vous n'avez pas weightSum dans RelativeLayout, uniquement LinearLayout) en utilisant un joli petit hack:

<rs.cdl.attendance.UI.RelativeRadioGroup
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="10dp">

    <View
        Android:id="@+id/strut"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:layout_centerHorizontal="true" />

    <RadioButton
        Android:id="@+id/start_radio_button"
        Android:layout_alignRight="@id/strut"
        Android:layout_alignParentLeft="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Start" />

    <RadioButton
        Android:id="@+id/finish_radio_button"
        Android:layout_alignLeft="@id/strut"
        Android:layout_alignParentRight="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Finish" />

    <RadioButton
        Android:id="@+id/pause_radio_button"
        Android:layout_alignRight="@id/strut"
        Android:layout_alignParentLeft="true"
        Android:layout_below="@id/start_radio_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Pause" />

    <RadioButton
        Android:id="@+id/continue_radio_button"
        Android:layout_alignLeft="@id/strut"
        Android:layout_alignParentRight="true"
        Android:layout_below="@id/finish_radio_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Continue" />

</rs.cdl.attendance.UI.RelativeRadioGroup>
0
BlueBrewBerry

Un moyen simple de créer plusieurs lignes de boutons radio consiste à utiliser MultiLineRadioGroup library. Il prend en charge autant de lignes et de colonnes que vous le souhaitez.

L'utilisation est simple: Dans le fichier build.gradle de votre projet, ajoutez:

allprojects {
    repositories {
        ...
        maven { 
            url "https://jitpack.io"
        }
        ...
    }
}

Dans le fichier build.gradle de votre application ou de votre module, ajoutez:

dependencies {
    ...
    compile 'com.github.Gavras:MultiLineRadioGroup:v1.0.0.6'
    ...
}

Vous pouvez utiliser une ressource de tableau de chaînes dans le XML pour créer votre vue de la manière suivante:

Dans la mise en page XML, ajoutez:

<com.whygraphics.multilineradiogroup.MultiLineRadioGroup xmlns:multi_line_radio_group="http://schemas.Android.com/apk/res-auto"
        Android:id="@+id/main_activity_multi_line_radio_group"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        multi_line_radio_group:default_button="button_2"
        multi_line_radio_group:max_in_row="3"
        multi_line_radio_group:radio_buttons="@array/radio_buttons" />

et dans arrays.xml, ajoutez:

<string-array name="radio_buttons">
        <item>button_1</item>
        <item>button_2</item>
        <item>button_3</item>
        <item>button_4</item>
        <item>button_5</item>
</string-array>

ou les ajouter par programme:

mMultiLineRadioGroup.addButtons("button to add 1", "button to add 2", "button to add 3");
0
Tzlil Gavra

J'essayais de faire la même chose. 

Ce que j'ai fini par faire, c'est d'ajouter plusieurs groupes Radio au sein de leurs propres LinearLayouts. Lors de la sélection d'un radiobutton de l'autre groupe RadioGroup vers celui actuellement sélectionné pour s'assurer que les premiers boutons RadioGroup n'étaient plus sélectionnés, j'ai ajouté .Checked = false à la fonction de radioboutons .Click. Et puis parce que j’ai eu des bugs au début où parfois le bouton radio nouvellement cliqué ne vérifiait pas, j’ai ajouté un .Checked = true au bouton radio actuel.

Mon XML

<LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:weightSum="3"
            Android:padding="10dp">
            <RadioGroup
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:weightSum="3"
                style="@style/radios"
                Android:orientation="horizontal">
                <RadioButton
                    Android:id="@+id/rad1"
                    Android:layout_width="0dp"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    style="@style/radios"
                    Android:text="1"
                    Android:checked="true" />
                <RadioButton
                    Android:id="@+id/rad2"
                    Android:layout_width="0dp"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    style="@style/radios"
                    Android:text="2" />
                <RadioButton
                    Android:id="@+id/rad3"
                    Android:layout_width="0dp"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    style="@style/radios"
                    Android:text="3" />
            </RadioGroup>
        </LinearLayout>
        <LinearLayout
            Android:orientation="horizontal"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:weightSum="3"
            Android:padding="10dp">
            <RadioGroup
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:weightSum="3"
                style="@style/radios"
                Android:orientation="horizontal">
                <RadioButton
                    Android:id="@+id/rad4"
                    Android:layout_width="0dp"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    style="@style/radios"
                    Android:text="4" />
                <RadioButton
                    Android:id="@+id/rad5"
                    Android:layout_width="0dp"
                    Android:layout_height="wrap_content"
                    Android:layout_weight="1"
                    style="@style/radios"
                    Android:text="5" />
            </RadioGroup>
        </LinearLayout>

Et puis mon C #

            var radio1 = FindViewById<RadioButton>(Resource.Id.rad1);
            var radio2 = FindViewById<RadioButton>(Resource.Id.rad2);
            var radio3 = FindViewById<RadioButton>(Resource.Id.rad3);
            var radio4 = FindViewById<RadioButton>(Resource.Id.rad4);
            var radio5 = FindViewById<RadioButton>(Resource.Id.rad5);

            radio1.Click += delegate
            {
                radio2.Checked = false;
                radio3.Checked = false;
                radio4.Checked = false;
                radio5.Checked = false;
                radio1.Checked = true;
            };

            radio2.Click += delegate
            {
                radio1.Checked = false;
                radio3.Checked = false;
                radio4.Checked = false;
                radio5.Checked = false;
                radio2.Checked = true;
            };

            radio3.Click += delegate
            {
                radio1.Checked = false;
                radio2.Checked = false;
                radio4.Checked = false;
                radio5.Checked = false;
                radio3.Checked = true;
            };

            radio4.Click += delegate
            {
                radio1.Checked = false;
                radio2.Checked = false;
                radio3.Checked = false;
                radio5.Checked = false;
                radio4.Checked = true;
            };

            radio5.Click += delegate
            {
                radio1.Checked = false;
                radio2.Checked = false;
                radio3.Checked = false;
                radio4.Checked = false;
                radio5.Checked = true;
            };

Primative, mais cela a fonctionné pour moi.

0
Adam