Я пытаюсь изменить ToggleButton
внешний вид по умолчанию . Вот XML, определяющий 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"/>
Теперь у нас есть два значка 30 x 30, которые мы хотим использовать для состояний с щелчком / без щелчка. Прямо сейчас у нас есть код, который программно меняет значок фона в зависимости от состояния:
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));
}
}
});
Очевидно, я ищу лучший способ сделать это. Я попытался сделать селектор для фонового изображения, который автоматически переключался бы между состояниями:
<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 -->
Но это не работает; читая ToggleButton
API ( http://developer.android.com/reference/android/widget/ToggleButton.html ), кажется, что единственными унаследованными атрибутами xml являются
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.
Атрибут android: state_checked, похоже, отсутствует, несмотря на то, что у класса есть метод isChecked()
и setChecked()
.
Итак, есть ли способ делать то, что я хочу в XML, или я застрял в своем беспорядочном обходном пути?
источник
CompoundButton
.CompoundButton
абстрактно!Ответы:
Ваш код в порядке. Однако кнопка переключения отобразит первый элемент в вашем селекторе, которому он соответствует, поэтому значение по умолчанию должно быть последним. Разложите предметы следующим образом, чтобы все они были использованы:
источник
switch
всегда будет выбирать "правильный" независимо от порядка, это больше похоже на длинныйif-elseif-elseif-else
с такими условиями, какstate_x == true && state_y == false && state_z = true
.