Android: Spécifier deux images différentes pour togglebutton à l'aide de XML

Je suis d'essayer de remplacer la valeur par défaut ToggleButton apparence. Voici le code XML qui définit la ToggleButton:

<ToggleButton android:id="@+id/FollowAndCenterButton"
        android:layout_width="30px"
        android:layout_height="30px"
        android:textOn="" android:textOff="" android:layout_alignParentLeft="true"
        android:layout_marginLeft="5px"
        android:layout_marginTop="5px" android:background="@drawable/locate_me"/>

Maintenant, nous avons deux 30 x 30 icônes que nous voulons utiliser pour les cliqué/non-cliqué unis. Pour l'instant nous avons un code de programme pour les changements de l'icône arrière-plan en fonction de l'état:

centeredOnLocation.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (centeredOnLocation.isChecked()) {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on));
            } else {
                centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me));
            }
        }
});

Évidemment, je suis à la recherche d'une meilleure façon de le faire. J'ai essayé de faire un sélecteur pour l'image d'arrière-plan, ce qui permettrait de basculer automatiquement entre les états:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/locate_me" /> <!-- default -->
 <item android:state_checked="true"
       android:drawable="@drawable/locate_me_on" /> <!-- pressed -->
 <item android:state_checked="false"
       android:drawable="@drawable/locate_me" /> <!-- unchecked -->

Mais cela ne fonctionne pas; la lecture de la ToggleButton API (http://developer.android.com/reference/android/widget/ToggleButton.html), il apparaît que le seul hérité des attributs xml sont

    XML Attributes
Attribute Name  Related Method  Description
android:disabledAlpha       The alpha to apply to the indicator when disabled. 
android:textOff         The text for the button when it is not checked. 
android:textOn      The text for the button when it is checked. 

Il ne semble pas être le android:state_checked attribut, en dépit de la classe ayant la méthode isChecked() et setChecked().

Alors, est-il un moyen de faire ce que je veux en XML, ou suis-je coincé avec mon désordre solution de contournement?

  • Remarque, si vous n'êtes pas en utilisant le texte, je pense qu'il peut être préférable d'utiliser CompoundButton.
  • Manque de respect de l'; CompoundButton est abstrait!
InformationsquelleAutor I82Much | 2009-10-07