2013-06-23 18 views
11

Mam problem konieczności radiobuttons w wielu wierszachWielofunkcyjne przyciski radiowe w systemie Android?

to mój 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> 

to kod

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

to będzie wyglądać enter image description here

będzie wybrać zarówno przyciski w 2 rzędach, chcę, aby wybrać tylko jeden przycisk w tych wierszach, dzięki za wszelką pomoc

+1

http: // stackoverflow.com/questions/10425569/radiogroup-with-two-columns-which-have-ten-radiobuttons/22465700 # 22465700 –

Odpowiedz

6

Włóż jedną radiogroup z pionowej orientacji i dodać dwa 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

idealne i proste rozwiązanie –

+27

To rozwiązanie nie rozwiązuje jednego z wymagań oryginalnego postu, to znaczy, że powinien wybrać tylko jeden przycisk z jednego z wierszy na raz: "wybierze oba przyciski w dwóch rzędach, chcę, aby wybrał tylko jeden przycisk w tych wierszach". Aby móc być jednym z nich, przyciski Radio muszą być bezpośrednimi elementami potomnymi grupy RadioGroup traktowane jako część tej grupy. – BasicPleasureModel

7

Od wyszukiwanie wokół, nie wydaje się być sposób to zrobić, Oznacza to, trzeba będzie wdrożyć to zachowanie układu ręcznie. Dwiema możliwymi opcjami są:

  1. Utwórz kopię grupy RadioGroup, aby rozszerzyć inny układ, lub przynajmniej pozwól mu sterować nią dynamicznie.

  2. Zaimplementuj swój własny układ, aby zastąpić RadioGroup, który rozszerza wybrany układ i implementuje OnClickListener. Istnieje dobry przykład: How to group a 3x3 grid of radio buttons?.

5

To zadziałało dla mnie. Pierwsza linia (NameRadioGroupe2.clearCheck();) wyczyścić inne radiogroup, a druga linia dodać znacznik wyboru w przycisku, który został sprawdzony

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

jeden prosty sposób, aby wiele linii przycisków radiowych jest użycie Biblioteka MultiLineRadioGroup. Obsługuje tyle wierszy i kolumn, ile chcesz.

Użycie jest proste: w projekcie w pliku build.gradle dodają:

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

dla aplikacji lub modułu plik build.gradle add:

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

Można użyć tablicę ciągów zasób w xml, aby utworzyć widok w ten sposób:

W układzie XML dodaj:

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

aw arrays.xml dodać:

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

lub dodać je programowo:

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

To także, tak jak inni próbowałem, nie zawija. Naprawiasz liczbę przycisków za pomocą 'max_in_row'. Jest to przydatne tylko wtedy, gdy chcesz ręcznie określić liczbę linii. Nie owija się automatycznie jak Flexbox. –

Powiązane problemy