Android. Как совместить форму рисования и цвет текста с разными состояниями для кнопки?

У меня есть некоторые проблемы с управлением списком состояний Android для кнопки. Я указал некоторый элемент Shape drwable для разных состояний, но мне также нужно изменить textColor в зависимости от текущего состояния.

Мой фактический список состояний xml:

<?xml version="1.0" encoding="utf-8"?>    
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true">
        <shape>
            <gradient
                android:startColor="@color/white"
                android:endColor="@color/light_gray"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/classic_red1" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:startColor="@color/classic_red1"
                android:endColor="@color/classic_red2"
                android:angle="270" />
            <stroke
                android:width="2dp"
                android:color="@color/white" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

Мне также нужно изменить textColor на основе этих двух состояний. Заранее спасибо.


person Joe Aspara    schedule 13.10.2011    source источник


Ответы (1)


селектор кнопки BG:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
    <shape>
        <gradient
            android:startColor="@color/white"
            android:endColor="@color/light_gray"
            android:angle="270" />
        <stroke
            android:width="3dp"
            android:color="@color/classic_red1" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>

</item>

<item android:state_focused="true">
    <shape>
        <solid android:color="#424242" />  //another custom shape here for focus state
    </shape>
</item>

<item>
    <shape>
        <gradient
            android:startColor="@color/classic_red1"
            android:endColor="@color/classic_red2"
            android:angle="270" />
        <stroke
            android:width="2dp"
            android:color="@color/white" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>

</item>

selector for the button text color:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/white" /> <!-- pressed -->
    <item android:color="@color/black" /> <!-- default/unchecked -->
</selector>
person androidu    schedule 13.10.2011
comment
Ааааа!! Какой дурак .. Я думал о том, чтобы поместить все ресурсы в фоновый режим. Большое спасибо! - person Joe Aspara; 13.10.2011
comment
а селектор BG - это xml в каталоге drawable, где цвет текста - это xml в каталоге цветов - см. stackoverflow.com/questions/8743584/ - person jobwat; 20.01.2015