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!
Vous devez vous connecter pour publier un commentaire.
Votre code est bien. Cependant, la bascule bouton pour afficher le premier élément de votre sélecteur de correspondance, de sorte que le défaut vient en dernier. Organiser les éléments de la manière suivante afin de s'assurer qu'ils seront tous utilisés:
switch
serait toujours choisir la "bonne" quel que soit l'ordre, il se comporte plus comme un longif-elseif-elseif-else
avec des conditions commestate_x == true && state_y == false && state_z = true
.