Ich versuche, das Standard- ToggleButton
Erscheinungsbild zu überschreiben . Hier ist das XML, das Folgendes definiert 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"/>
Jetzt haben wir zwei 30 x 30 Symbole, die wir für die angeklickten / nicht angeklickten Zustände verwenden möchten. Im Moment haben wir Code, der das Hintergrundsymbol je nach Status programmgesteuert ändert:
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));
}
}
});
Offensichtlich suche ich nach einem besseren Weg, dies zu tun. Ich habe versucht, einen Selektor für das Hintergrundbild zu erstellen, der automatisch zwischen den Status wechselt:
<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 -->
Das funktioniert aber nicht; Beim Lesen der ToggleButton
API ( http://developer.android.com/reference/android/widget/ToggleButton.html ) scheinen die einzigen geerbten XML-Attribute zu sein
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.
Es scheint kein android: state_checked-Attribut zu geben, obwohl die Klasse die Methode isChecked()
und hat setChecked()
.
Gibt es also eine Möglichkeit, in XML das zu tun, was ich will, oder bin ich mit meiner chaotischen Problemumgehung festgefahren?
quelle
CompoundButton
.CompoundButton
ist abstrakt!Antworten:
Ihr Code ist in Ordnung. Mit der Umschalttaste wird jedoch das erste Element in Ihrer Auswahl angezeigt, mit dem es übereinstimmt. Daher sollte die Standardeinstellung die letzte sein. Ordnen Sie die Elemente folgendermaßen an, um sicherzustellen, dass sie alle verwendet werden:
quelle
switch
würde immer das "richtige" auswählen, unabhängig von der Reihenfolge, dies verhält sich eher wie ein langwierigerif-elseif-elseif-else
mit Bedingungen wiestate_x == true && state_y == false && state_z = true
.