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>
Надеюсь, что это сработает!