Intereting Posts
Используя startActivityForResult, как получить requestCode в дочерней активности? Проблема с дополнительным пространством в нижней части Android-браузера GetView () не может выбрасывать исключение Android retrolambda, утверждение lambda можно заменить выражением лямбда Сотовые и курсоры (расстроенные) Как программно настроить уровень звука уведомления? Тост: внутренняя ошибка возникает при интеграции Google Plus в Android Есть ли способ интегрировать Eclipse с Gradle в проект Android? Получение данных для пользовательской схемы URL в Android Как перейти к родительской активности Внедрение списка в скользящем ящике с уже имеющимся списком Есть ли бесплатный C ++ и / или C # компилятор, который работает на Android-планшетном ПК? Прокрутка TextView до определенной строки Добавить различные темы в приложение для Android Android ListView с элементами, доступными для кликов в его рядах, вызывает проблемы с продолжением прокрутки

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

Я пытаюсь переопределить внешний вид 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 --> 

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

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

Solutions Collecting From Web of "Android: укажите два разных изображения для переключателя с помощью XML"

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

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:state_pressed="true" /> //currently pressed turning the toggle on <item android:state_pressed="true" /> //currently pressed turning the toggle off <item android:state_checked="true" /> //not pressed default checked state <item /> //default non-pressed non-checked </selector>