Android: textColor отключенной кнопки в селекторе не отображается?

Я пытаюсь сделать кнопку с селектором, моя кнопка может иметь следующие состояния:

  • Enabled/Disabled
  • Пресса/Не нажата

В соответствии с упомянутыми выше состояниями. Мне нужно манипулировать кнопкой:

  • Цвет текста
  • фоновое изображение

Кнопка начинает отключиться, поэтому у нее должен быть отключен textColor и отключен фон кнопки. Но я могу видеть текст textColor по умолчанию (указанный в стиле) и NO background image!

Вот мой селектор button_selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button" />    

    <item android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/button_pressed"/>

    <item android:state_pressed="true"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button"/>

    <item android:state_pressed="false"
        android:state_enabled="true"
        android:drawable="@drawable/button"/>    

</selector>

И вот объявление моей кнопки в моем layout.xml

    <Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

И, наконец, это мой стиль (где установлен мой текст textColor)

<?xml version="1.0" encoding="utf-8"?>

 <resources>

     <style name="buttonStyle">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">#282780</item>
      <item name="android:textSize">18sp</item>
     </style>

</resources>

Пожалуйста, помогите!

Ответ 1

Вам нужно также создать ColorStateList для цветов текста, идентифицирующих разные состояния.

Выполните следующие действия:

  • Создайте еще один XML файл в res\color, названный как-то вроде text_color.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- disabled state -->
      <item android:state_enabled="false" android:color="#9D9FA2" /> 
      <item android:color="#000"/>
    </selector>
    
  • В style.xml поставьте ссылку на этот файл text_color.xml следующим образом:

    <style name="buttonStyle">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">@color/text_color</item>
      <item name="android:textSize">18sp</item>
    </style>
    

Это должно решить вашу проблему.

Ответ 2

Самое простое решение - установить цветной фильтр на фоновое изображение и кнопку, как я увидел здесь

Вы можете сделать следующее:

if ('need to set button disable')
    button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
    button.getBackground().setColorFilter(null);

Надеюсь, я помог кому-то...

Ответ 3

1.Создайте папку цветов в папке/res/и в папке цвета создайте на xml:

text_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- disabled state --> 
<item android:state_enabled="false" android:color="#776678" /> 
 <item android:color="#ffffff"/>
</selector>

2. Теперь создайте раскладку xml: -

 <Button

        android:id="@+id/button_search"

        android:layout_width="652dp"

        android:layout_height="48dp"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:layout_marginTop="18dp"

        android:background="@android:color/transparent"

        android:text="Hello Bhaskar"

        android:textColor="@color/text_color_selector"/>  

Ответ 4

<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

Я не вижу разметку вашей кнопки в вашем макете xml. добавьте это в макет кнопки.

android:enabled="false"

поэтому ваш макет кнопки будет,

<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:enabled="false"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

Ответ 5

<item android:state_enabled="true"> </item>

<item android:state_enabled="false"> </item>

<item android:state_pressed="true" > </item>

Надеюсь, что это сработает!