J'essaie de remplacer l' ToggleButton
apparence par défaut . Voici le XML qui définit le 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 icônes 30 x 30 que nous voulons utiliser pour les états cliqués / non cliqués. À l'heure actuelle, nous avons du code qui modifie par programme l'icône d'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));
}
}
});
De toute évidence, je cherche une meilleure façon de faire cela. J'ai essayé de créer un sélecteur pour l'image d'arrière-plan, qui basculerait 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; en lisant l' ToggleButton
API ( http://developer.android.com/reference/android/widget/ToggleButton.html ), il semble que les seuls attributs xml hérités 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 y avoir l'attribut android: state_checked, bien que la classe ait la méthode isChecked()
et setChecked()
.
Alors, y a-t-il un moyen de faire ce que je veux dans XML, ou suis-je coincé avec ma solution de contournement désordonnée?
la source
CompoundButton
.CompoundButton
est abstrait!Réponses:
Votre code est correct. Cependant, le bouton bascule affichera le premier élément de votre sélecteur auquel il correspond, donc la valeur par défaut doit venir en dernier. Disposez les articles de la manière suivante pour vous assurer qu'ils seront tous utilisés:
la source
switch
sélectionnerait toujours le "bon" quel que soit l'ordre, cela se comporte plus comme un longif-elseif-elseif-else
avec des conditions commestate_x == true && state_y == false && state_z = true
.