2011-06-13 12 views
5

Me gustaría crear un View personalizado que contiene un RadioGroup. Dentro de RadioGroup me gustaría configurar el RadioButtons para que el primer RadioButton esté en la parte superior izquierda, el 2º debajo, el tercero a la derecha del 1er y el 4to debajo. En otras palabras, quiero crear un grupo donde los botones de radio estén distribuidos en un cuadrado de tipo. Creo que si configuro la orientación del grupo para que sea vertical, todos los botones de radio estarán en línea recta. Si, por otro lado, ajusto la orientación a horizontal, entonces, de nuevo, los botones de radio estarán en línea recta, yendo en sentido horizontal. ¿Hay alguna forma de hacer lo que quiero o me veo obligado a configurar dos RadioGroups por separado, ambos en orientación horizontal?configurar un RadioGroup programmatically

+0

puede utilizar RelativeLayout en lugar de LinearLayout – Pratik

+1

@Pratik ¿cómo va a ayudar? Eso me ayudará a configurar el Grupo en relación con otra cosa, pero ¿qué pasa con los botones relativos entre sí? – LuxuryMode

Respuesta

31

Probar el procesamiento de RadioButtons sin el uso de RadioGroup.

Conecta con cable la persona RadioButtons y mantenla en un ArrayList<RadioButton>.

List<RadioButton> radioButtons = new ArrayList<RadioButton>(); 

radioButtons.add((RadioButton)findViewById(R.id.button1));   
radioButtons.add((RadioButton)findViewById(R.id.button2)); 
radioButtons.add((RadioButton)findViewById(R.id.button3)); 
etc. 

Establecer un OnCheckedChangeListener para cada RadioButton.

for (RadioButton button : radioButtons){ 

    button.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) processRadioButtonClick(buttonView); 
     } 
    }); 

} 

A continuación, crear un método para desactivar la RadioButtons no seleccionada.

private void processRadioButtonClick(CompoundButton buttonView){ 

    for (RadioButton button : radioButtons){ 

     if (button != buttonView) button.setChecked(false); 
    } 

} 

Con este enfoque, el RadioButtons se pueden situar en cualquier lugar dentro de la trama XML.

+0

Respuesta impresionante Matt, ¿Puede explicar cómo obtener Id del botón de opción seleccionado, lo intenté pero fallé. Esperando tu valiosa respuesta. Gracias. –

0

Debería la subclase de RadioGroup y anular el método onLayout().

+0

Gracias! ¿Tiene un ejemplo de cómo se vería la anulación para lograr lo que estoy tratando de hacer? – LuxuryMode

+0

puede averiguar cómo implementar onLayout desde la vista del panel de Roman Nurik: https://gist.github.com/882650 – woodshy

Cuestiones relacionadas