2013-06-23 8 views
11

Sto avendo problemi ad avere RadioButtons in più righePulsanti radio a più file in Android?

questo è il mio 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> 

questo è il codice

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"); 
    } 
} 

questo sarà simile enter image description here

selezionerà sia i pulsanti in 2 righe, voglio che selezioni un solo pulsante in quelle file, grazie per qualsiasi aiuto

+1

http: // StackOverflow.it/questions/10425569/radiogroup-with-two-columns-which-have-ten-radiobutton/22465700 # 22465700 –

risposta

6

mettere uno RadioGroup con orientamento verticale e aggiungere due 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> 
+0

soluzione perfetta e semplice –

+27

Questa soluzione non risolve uno dei requisiti nel post originale, ovvero che dovrebbe selezionare solo un pulsante da una qualsiasi delle righe alla volta: "selezionerà entrambi i pulsanti in 2 righe, voglio che selezioni un solo pulsante in quelle righe". I RadioButton devono essere figli diretti del Gruppo Radio per poter essere trattati come parte di quel gruppo. – BasicPleasureModel

7

Da ricerca in giro, non sembra essere un modo per farlo, Questo significa che si dovrà implementare questa comportamento del layout manualmente. Due opzioni possibili sono:

  1. creare una copia del RadioGroup per estendere un layout diverso, o almeno consentono di controllare in modo dinamico.

  2. Implementare il proprio layout personalizzato per sostituire RadioGroup che estende un layout a scelta e implementa OnClickListener. C'è un buon esempio How to group a 3x3 grid of radio buttons?.

5

Questo ha funzionato per me. La prima linea (NameRadioGroupe2.clearCheck();) cancellare l'altra RadioGroup, e la seconda linea di aggiungere un segno di spunta nel pulsante che è stato registrato

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; 
     } 
     . 
     . 
     . 
     . 
     . 
0

Un modo semplice per rendere più righe di pulsanti di opzione è quella di utilizzare Libreria MultiLineRadioGroup. Supporta tutte le righe e le colonne che vuoi.

L'utilizzo è semplice: Nel file di build.gradle aggiuntivo del progetto:

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

È possibile utilizzare un array di stringhe:

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

Nel file di build.gradle add del modulo dell'applicazione o risorsa in xml per creare la visualizzazione in questo modo:

Nell'aggiunta XML del layout:

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

e in arrays.xml aggiungere:

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

o aggiungerle a livello di codice:

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

Anche questo, come altri che ho provato, non si chiude. Risolvi il numero di pulsanti usando 'max_in_row'. Questo è utile solo se si desidera decidere il numero di linee manualmente. Non si avvolge automaticamente come Flexbox. –