Цвет тени на кнопках в зависимости от состояния в XML - Android - PullRequest
11 голосов
/ 17 февраля 2011

Я создал пользовательские кнопки 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>

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

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

Ответы [ 4 ]

8 голосов
/ 28 июня 2011

Похоже, что платформа 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 голосов
/ 10 мая 2012

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

0 голосов
/ 06 апреля 2012

У вас может быть селектор для цвета тени, подобный этому: 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>
0 голосов
/ 17 февраля 2011

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

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...