Цвет тени на кнопках в зависимости от состояния в XML - Android

Я создал пользовательские ToggleButtons в Android, и поскольку все кнопки наследуются от одного и того же xml, я хочу изменить, как они действуют в зависимости от состояния, поэтому, когда состояние проверено, я хочу изменить цвет тени, но это не похоже на возможно с текущим SDK.

Я создал файл xml, который содержит button_colors:

<?xml version="1.0" encoding="utf-8"?>
<selector
   xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_checked="true"
    android:color="#FFFFFF"  />

<item
    android:color="#000000" />
 </selector>

Но это, похоже, работает только с текстом, а не с цветом тени в тексте. Есть что-то, что мне не хватает? И, скорее, не делайте этого для каждой кнопки вручную в коде, так как я хочу, чтобы это применимо к каждой кнопке в приложении.

ИЗМЕНЕНИЕ ОБНОВЛЕНИЯ:

В настоящее время мой селектор выглядит следующим образом

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

<item
    android:state_checked="true"
    android:drawable="@drawable/button_gradient_selected" />

<item
    android:drawable="@drawable/button_gradient" />

</selector>

Но, как я уже упоминал комментатора ниже, я не могу изменить стиль/текст-цвет-тень отсюда, так как он может выглядеть только в виде drawable.

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

Ответ 1

Пожалуйста, обратитесь к моему решению по другому вопросу StackOverFlow. Я расширил TextView, чтобы дать рабочее решение здесь. (Замените TextView на кнопку)

Ответ 2

Кажется, что платформа Android не поддерживает это.

Из TextView.java:

        case com.android.internal.R.styleable.TextView_textColor:
            textColor = a.getColorStateList(attr);
            break;

        case com.android.internal.R.styleable.TextView_shadowColor:
            shadowcolor = a.getInt(attr, 0);
            break;

Они обрабатывают textColor и shadowColor по-разному.

Ответ 3

Это файл селектора, который вы должны реализовать:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="false" android:drawable="@drawable/btn_toggle_off" /> 
  <item android:state_checked="true" android:drawable="@drawable/btn_toggle_on" /> 
  </selector>

Это изображение, используемое для ToggleButton по умолчанию: btn_toggle_on и btn_toogle_off

Ответ 4

У вас может быть селектор для теневого цвета, например: color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither="true">
    <item 
        android:state_pressed="true"
        android:color="@color/btn_text_on" />
    <item 
        android:state_focused="true"
        android:color="@color/btn_text_on" />
    <item
        android:color="@color/btn_text_off" />        
</selector>

, а затем используйте этот селектор при стилизации вашей кнопки в styles.xml следующим образом:

<style name="ButtonStyle">
<item name="android:textColor">#FF383C48</item>
    <item name="android:textSize">12sp</item>
    <item name="android:shadowColor">@drawable/color_selector</item>
    <item name="android:shadowDx">0</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
    <item name="android:typeface">sans</item>
    <item name="android:textStyle">bold</item>
</style>