2011-07-26 1 views
6

Y a-t-il un moyen de contrôler la position du texte pour activer et désactiver l'état d'un ToggleButton? Par exemple, je veux que l'étiquette de texte soit alignée quand elle est allumée et alignée à droite lorsqu'elle est désactivée.Emplacement de l'étiquette de texte ToggleButton pour l'état activé et désactivé

EDIT: Aussi, je voudrais inclure un peu de remplissage pour le texte à gauche et à droite. Environ 5dp. et avoir un contrôle plus fin sur le placement de l'étiquette si possible.

RÉPONSE: C'est ce dont j'avais besoin!

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

Hi. Pouvez-vous s'il vous plaît fournir la partie de fichier XML mise en page où vous avez déclaré le bouton bascule? Je vous remercie. – Paul

+0

J'ai essayé cela et en fait j'ai pensé que le texte serait placé du côté droit de la ligne verte, mais plutôt placé du côté droit au-dessus de la ligne verte. Il semble que placer le texte sur le côté droit de la ligne verte n'est pas possible - référence: http://stackoverflow.com/questions/11084956/tooglebutton-align-text-label-on-the-right – Paul

Répondre

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

Merci! Y a-t-il un moyen d'avoir un grain plus fin sur la position du texte? Comme à gauche, mais rembourrage 5dp? – user123321

+0

J'ai ajouté des options pour définir le remplissage sur le bouton bascule. C'est vraiment aussi simple que toggleButton.setPaddin (int left, int top, int right, int bottom); Pour plus de contrôle, vous pouvez envisager de configurer LayoutParams pour le ToggleButton – Entreco

+0

Yup, merci! Je l'ai juste compris aussi! Tu gères. Merci mec! – user123321

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

Notez que vous ne verrez aucun changement si le bouton n'est pas d'une taille minimum (doit être plus grand que le texte).

+0

Merci! Y a-t-il un moyen d'avoir un grain plus fin sur la position du texte? Comme à gauche, mais rembourrage 5dp? – user123321

1

modifier l'alignement en changeant la gravité chaque fois que le bouton est cliqué en ajoutant un code dans le OnClickListener comme ceci:

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

Merci! Y a-t-il un moyen d'avoir un grain plus fin sur la position du texte? Comme à gauche, mais rembourrage 5dp? – user123321

+0

Je ne connais aucun moyen simple d'obtenir un grain plus fin sur la position. Mais je connais une solution laide, ce serait d'ajouter un espace vide au début du texte aligné à gauche puis un autre espace vide à la fin du texte aligné à droite. Comme ça "On" et "Off" – HenrikS

+0

Ouais, je considérais cela aussi, mais j'ai aussi besoin de rembourrage sur le TOP! On dirait qu'un bouton bascule ne permet pas beaucoup de personnalisations. – user123321

1

C'est ce que je avais besoin!

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