2011-07-26 9 views
6

¿Hay alguna forma de controlar la posición de texto para un estado activado y desactivado de ToggleButton? Por ejemplo, quiero que la etiqueta de texto se alinee a la izquierda cuando está encendida y alineada a la derecha cuando está apagada.Colocación de etiqueta de texto de palanca para estado activado y desactivado

EDITAR: Además, me gustaría incluir un pequeño relleno para el texto de la izquierda y la derecha. Alrededor de 5dp. y tener un control más fino sobre la colocación de la etiqueta si es posible.

RESPUESTA: ¡Esto es lo que necesitaba!

button.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); 
button.setPadding(0, 0, 5, 0); 
+0

Hola. ¿Puede proporcionar la parte del archivo de diseño xml donde declaró el botón de alternar? Gracias. – Paul

+0

Lo he intentado y, en realidad, pensé que el texto se colocaría en el lado derecho de la línea verde, pero en su lugar se colocaría en el lado derecho encima de la línea verde. Parece que no es posible colocar el texto en el lado derecho de la línea verde - referencia: http://stackoverflow.com/questions/11084956/tooglebutton-align-text-label-on-the-right – Paul

Respuesta

7

public class StackActivity extends Activity implements OnCheckedChangeListener { 

    private ToggleButton tb; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     tb = (ToggleButton)findViewById(R.id.toggleButton1); 
     tb.setOnCheckedChangeListener(this); 

    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     if(isChecked) 
     { 
      tb.setGravity(Gravity.LEFT); 
      tb.setPadding(5,0,0,0); // Set left padding 
     } else 
     { 
      tb.setGravity(Gravity.RIGHT); 
      tb.setPadding(0,0,5,0); // Set right padding 
     } 
    } 
} 
+0

¡Gracias! ¿Hay alguna manera de tener un grano más fino sobre la posición del texto también? Al igual que IZQUIERDA pero relleno de 5dp? – user123321

+0

He agregado opciones para configurar el relleno en togglebutton. Es realmente tan simple como toggleButton.setPaddin (int left, int top, int right, int bottom); Para obtener más control, puede considerar configurar los Parámetros de diseño para el ToggleButton – Entreco

+0

Sí, ¡gracias! ¡Me di cuenta de eso también !. Tu rock ¡Gracias hombre! – user123321

2
ToggleButton b1 = (ToggleButton) findViewById(R.id.button1); 
     if(b1.isChecked()){ 
      b1.setGravity(Gravity.RIGHT); 
     } 
     else{ 
      b1.setGravity(Gravity.LEFT); 
     } 

Tenga en cuenta que no verá ningún cambio si el botón no es de un tamaño mínimo (tiene que ser más grande que el texto de la etiqueta).

+0

¡Gracias! ¿Hay alguna manera de tener un grano más fino sobre la posición del texto también? Al igual que IZQUIERDA pero relleno de 5dp? – user123321

1

cambiar la alineación cambiando la gravedad cada vez que el botón se hace clic añadiendo un poco de código en el OnClickListener así:

toggleButton.setOnClickListener(new OnClickListener() 
     { 
      public void onClick(View v) { 
       if (((ToggleButton)v).isChecked()) 
        toggleButton.setGravity(Gravity.LEFT); 
       else 
        toggleButton.setGravity(Gravity.RIGHT); 
      } 
     }); 
+0

¡Gracias! ¿Hay alguna manera de tener un grano más fino sobre la posición del texto también? Al igual que IZQUIERDA pero relleno de 5dp? – user123321

+0

No conozco ninguna buena manera simple de obtener un grano más fino sobre la posición. Pero sí sé una solución fea, sería agregar un espacio en blanco al comienzo del texto alineado a la izquierda y luego otro espacio en blanco al final del texto alineado a la derecha. Me gusta "On" y "Off" – HenrikS

+0

Sí, también estaba considerando eso, ¡pero también necesito relleno en el TOP! Parece que un botón de alternar no permite muchas personalizaciones. – user123321

1

Esto es lo que necesitaba!

button.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); 
button.setPadding(0, 0, 5, 0); 
Cuestiones relacionadas