AppCompatButton не изменяет текст или фон с помощью селекторов

#java #android #android-layout #kotlin

#java #Android #android-макет #kotlin

Вопрос:

У меня есть кнопка, для которой я определил два селектора, один для текста, а другой для фона.

Выбор цвета текста

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow" android:state_activated="true" />
    <item android:color="@color/pink" android:state_activated="false" />
</selector>
  

Селектор для фона

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/image_no_selected" android:state_activated="true" />
    <item android:drawable="@drawable/image_selected" android:state_activated="false" />
</selector>
  

Кнопка в Xml

 <androidx.appcompat.widget.AppCompatButton
            android:id="@ id/myButton"
            ....
            android:background="@drawable/selector_background"
            ...
            android:textColor="@drawable/selector_text_color"
            />
  

Когда я нажимаю кнопку, я хочу изменить состояние, поэтому я помещаю это :

 myButton.isSelected = isSelected //boolean that changes true or false
  

Но даже кнопка не меняется — хотя я меняю isSelected то, чего мне не хватает?

Ответ №1:

Выбранный — это не то же самое, что активированный. Вам нужно использовать либо:

  • myButton.isActivated = ...

  • Или измените android:state_activated на android:state_selected :

     <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/image_no_selected" android:state_selected="true" />
        <item android:drawable="@drawable/image_selected" android:state_selected="false" />
    </selector>
      

    (кстати, похоже, что ваши имена для рисования или наоборот здесь)

Комментарии:

1. Есть идеи, @Nicolas?

2. Вы пробовали оба решения?

3. Да, оба и не работают, у меня есть state_activate и при нажатии на кнопку я добавляю myButton.isActivated=true , но ничего не меняю

4. Не совсем исключено, что кнопка не обрабатывает activated состояние, в котором можно рисовать. Попробуйте использовать isSelected и измените атрибут состояния XML-селектора на android:state_selected . Или вы уже пробовали это?