2012-06-09 10 views
3

Я хочу отобразить 6 переключателей той же группы радио. Но все 6 переключателей остаются на одной линии и уходят с экрана. Как отображать их в две строки (по три переключателя)? Я пробовал все возможное для меня (я новичок в android).радиокнопка несколько строк

+0

'Я пробовал все возможное для меня 'что ты пробовал? пожалуйста, объясни. – ariefbayu

+0

@silent Я положил переключатели в относительном макете, чтобы попробовать leftOf/rightOf, но кнопки исчезли. Поскольку макеты не допускаются внутри тега радиогруппы. И если бы я разделил радиообъекты в двух разных радиогруппах, они не были бы в одной радиогруппе. Пробовал обернуть контент, но он не сработал. –

ответ

4

От поиска, похоже, нет способа сделать это, так как RadioGroup использует LinearLayout, который не обертывается. Поскольку радиокнопки должны быть прямыми дочерними элементами в группе радиостанций, вы не можете добавлять вспомогательные макеты в группу радиостанций.

Это означает, что вам придется реализовать это поведение макета вручную. Возможны два варианта:

  • Создайте копию RadioGroup, чтобы расширить разный макет или, по крайней мере, позволить вам управлять им динамически.
  • Внесите свой собственный макет для замены RadioGroup, который расширяет макет по вашему выбору и реализует OnClickListener. Есть хороший пример here.
+0

Спасибо BD за подтверждение того, что я на самом деле заключил, но где-то в моем сознании у меня была надежда, что должно быть что-то, что мне не хватает. Благодаря @silent –

1

Простой ответ заключался бы в том, чтобы обернуть вашу RadioGroup в ScrollView, чтобы пользователь мог прокручивать экранные кнопки (не очень изящные, но не интенсивные для кода).

+0

Для первой версии я собираюсь использовать этот простой шаг. Позже я создам настраиваемый радиоуправление. Thanks –

+0

Нет проблем. Рад был помочь. – Barak

0

Динамически сгенерирован marginTop и marginLeft, чтобы настроить необходимость находиться в одной и той же линии радиообмена. Во-первых, получить ширину экрана, установите layoutparams MarginLeft для ширины экрана вдвое, высота MarginTop должна быть скорректирована в зависимости от конкретного radiobutton.eg:

holder.question = (TextView) convertView.findViewById(R.id.topic_item_question); 
      holder.option = (RadioGroup) convertView.findViewById(R.id.topic_item_option); 
      holder.option1 = (RadioButton) convertView.findViewById(R.id.topic_item_option1); 
      holder.option2 = (RadioButton) convertView.findViewById(R.id.topic_item_option2); 

      //为了能够在一行显示两个radiobutton:获取屏幕的宽度 
      WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
      int width = wm.getDefaultDisplay().getWidth();//左侧设置的间距 
      int height = DensityDpToPx.dpToPx(context, 24);//处于第二个的高度间距 

      LinearLayout.LayoutParams params = (LayoutParams) holder.option2.getLayoutParams(); 
      params.setMargins(width/2, -height, 0, 0); 
      holder.option2.setLayoutParams(params); 

      holder.option3 = (RadioButton) convertView.findViewById(R.id.topic_item_option3); 
      holder.option4 = (RadioButton) convertView.findViewById(R.id.topic_item_option4); 

      LinearLayout.LayoutParams paramsTwo = (LayoutParams) holder.option4.getLayoutParams(); 
      paramsTwo.setMargins(width/2, -height, 0, 0); 
      holder.option4.setLayoutParams(paramsTwo);