Android: укажите два разных изображения для переключателя с использованием XML

Я пытаюсь переопределить внешний вид ToggleButton по умолчанию. Вот XML, который определяет ToggleButton :

  

Теперь у нас есть два значка 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)); } } }); 

Очевидно, я ищу лучший способ сделать это. Я попытался сделать селектор фонового изображения, который автоматически переключался между состояниями:

         

Но это не работает; чтение API ToggleButton ( 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, несмотря на class, имеющий метод isChecked() и setChecked() .

Итак, есть ли способ сделать то, что я хочу в XML, или я придерживаюсь своего грязного обходного пути?

Ваш код в порядке. Однако кнопка переключения отображает первый элемент в вашем селекторе, который соответствует ему, поэтому значение по умолчанию должно быть последним. Организуйте пункты следующим образом, чтобы обеспечить их использование:

   //currently pressed turning the toggle on  //currently pressed turning the toggle off  //not pressed default checked state  //default non-pressed non-checked  
  • Заполнение ListView с помощью ArrayList?
  • Сортировка TreeMap по значению
  • Как установить -source 1.7 в Android Studio и Gradle
  • Как открыть веб-браузер по умолчанию с помощью java
  • Сбой интерфейса Javascript для Android Proguard
  • Как преобразовать массив байтов в строку и наоборот?
  • Android-разрешение не работает, даже если я его объявил
  • Android Вызов метода из другого classа
  • источник отладки jdk не может просматривать переменную, что она
  • Ошибка сборки тестов для Android: несколько файлов dex определяют Landroid / support / test / BuildConfig
  • Java: как обращаться к методам из другого classа
  • Давайте будем гением компьютера.