Ответ 1
Пожалуйста, обратитесь к моему решению по другому вопросу StackOverFlow. Я расширил TextView
, чтобы дать рабочее решение здесь. (Замените TextView на кнопку)
Я создал пользовательские 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.
Когда я пытаюсь вставить другой стиль на кнопку здесь, он закроет или либо не изменит стиль в зависимости от состояния. Когда я только пытаюсь вставить здесь стиль, и у вас есть возможность рисования в стиле, который заставляет его закрывать. В любом случае это не сработает.
Пожалуйста, обратитесь к моему решению по другому вопросу StackOverFlow. Я расширил TextView
, чтобы дать рабочее решение здесь. (Замените TextView на кнопку)
Кажется, что платформа 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 по-разному.
Это файл селектора, который вы должны реализовать:
<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
У вас может быть селектор для теневого цвета, например: 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>