2014-11-23 5 views
1

Мой макет XML выглядитAndroid RadioGroup горизонтального выравнивания содержимого не видно

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scrollview1" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<LinearLayout 
android:id="@+id/linearlayout1" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 


</LinearLayout> 

</ScrollView> 

Я создаю RadioGroup и добавление радиокнопки с помощью кода

LinearLayout ll = (LinearLayout)findViewById(R.id.linearlayout1);   
     RadioGroup rg = new RadioGroup(this); 
     rg.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
     rg.setOrientation(0); 
     while(itr.hasNext()){ 
      final String drinkname = itr.next(); 
      System.out.println("drinkname: "+drinkname); 
      RadioButton rb = new RadioButton(this); 
      rb.setText(drinkname);    
      rg.addView(rb); 
     } 
     rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       //group.clearCheck(); 

       int id = group.getCheckedRadioButtonId(); 
       RadioButton selectrb = (RadioButton) findViewById(id); 
       System.out.println(selectrb.getText().toString()); 
       WebMenu.drinkname = selectrb.getText().toString(); 


      } 
     }); 
     ll.addView(rg); 

Предполагается показать 6 значений; Но он показывает только 3 правильно, а остальные выглядят как скрытые. Кто-нибудь может мне помочь?

Спасибо заранее!

+0

Не хотите добавить картинку? – joao2fast4u

+0

Ваш код работает нормально. Вы уверены, что ваш итератор имеет 6 элементов? – joao2fast4u

+0

@ joao2fast4u - SO не позволяет добавить рис. Я добавил в dropbox. Пожалуйста, найдите ссылку. https://www.dropbox.com/s/kju5uawmsfxhome/SO1.png?dl=0 – Prabhu

ответ

0

С текущей реализацией класса RadioGroup вы не можете иметь две строки: RadioButtons. Итак, либо вы установите HorizontalScrollView на свой макет, и разрешите пользователю прокручивать, чтобы увидеть все RadioButtons, или вы используете два RadioGroups, каждый из которых содержит 3 RadioButtons.

Таким образом, используя ваш пример (с небольшими вариациями), это последнее решение может быть реализована следующим образом:

LinearLayout ll = (LinearLayout)findViewById(R.id.linearlayout1);   
    RadioGroup rg = new RadioGroup(this); 
    RadioGroup rg2 = new RadioGroup(this); 
    rg.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    rg.setOrientation(LinearLayout.HORIZONTAL); 
    rg2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    rg2.setOrientation(LinearLayout.HORIZONTAL); 
    String [] drinks = new String [] {"Mountain Dew", "7Up", "Root Beer", "Pepsi", "Cola", "Ice Tea"}; 
    int i = 0; 

    while(i<drinks.length){ 
     final String drinkname = drinks[i]; 
     Log.i(TAG, "drinkname: "+drinkname); 
     RadioButton rb = new RadioButton(this); 
     rb.setText(drinkname); 
     if(i %2==0) 
      rg.addView(rb); 
     else 
      rg2.addView(rb); 
     i++; 
    } 

    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      //unselect all radios in the other RadioGroup 
      if(rg2.getCheckedRadioButtonId()!=-1){ 
       rg2.setOnCheckedChangeListener(null); 
       rg2.clearCheck(); 
       rg2.setOnCheckedChangeListener(this); 
      } 

      int id = group.getCheckedRadioButtonId(); 
      RadioButton selectrb = (RadioButton) findViewById(id); 
      if(selectrb != null){ 
       Log.i(TAG,selectrb.getText().toString()); 
       WebMenu.drinkname = selectrb.getText().toString(); 
      } 


     } 
    }); 

    rg2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      //unselect all radios in the other RadioGroup 
      if(rg.getCheckedRadioButtonId()!=-1){ 
       rg.setOnCheckedChangeListener(null); 
       rg.clearCheck(); 
       rg.setOnCheckedChangeListener(this); 
      } 

      int id = group.getCheckedRadioButtonId(); 
      RadioButton selectrb = (RadioButton) findViewById(id); 
      if(selectrb != null){ 
       Log.i(TAG,selectrb.getText().toString()); 
       WebMenu.drinkname = selectrb.getText().toString(); 
      } 


     } 
    }); 

    ll.addView(rg); 
    ll.addView(rg2); 

Вы просто должны быть осторожны с тем, что ваши два RadioGroups отслеживать только 3 RadioButtons каждый. Они не общаются друг с другом и не влияют друг на друга. Поэтому, если вы выберете один из RadioButton из первой строки (сначала RadioGroup), у вас все еще есть ваш выбор на втором RadioGroup и наоборот. Вы должны сами управлять этой ситуацией.

Edit: Одним из способов управления это отменить выбор всех radioButtons в RadioGroup1, когда мы выбираем один RadioButton в RadioGroup2 и наоборот. Я добавил код для этого.

Смежные вопросы