Android - Как программно установить цвет кнопки

Я читаю в некоторых данных из API REST и потребности генерировать некоторые кнопки на основе информации, которую получает приложение.

Поскольку мне нужны те же кнопки на многих экранах Действия, я расширил Кнопку для создания RachelButton, и я настроил ее в конструкторе.

public RachelButton(Context context, Info info) {
    super(context);
    this.info= info;

    setText(info.getTime());
    setTypeface(Typeface.DEFAULT, Typeface.BOLD);

    int identifier = 0;

    if(info.isAvailable()){
        identifier = getContext().getResources().getIdentifier("drawable/info_button_"+info.getType(), null, getContext().getPackageName());
    }else{
        identifier = R.drawable.info_button_unavailable;
    }

    if(identifier == 0){
        Log.e("INFO_BUTTON", "no button for "+info.getType());
    }

    setBackgroundResource(identifier);
    setTextColor(R.color.info_button_text_color);

    setOnClickListener(new View.OnClickListener(){
        public void onClick(View view) {
            //do stuff
        }
    });
}

Затем пример ресурса, который я использую для генерации цветной кнопки, является этим:

<?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/button_pressed"
            android:endColor="@color/button_pressed"
            android:angle="270" />
        <stroke
            android:width="3dp"
            android:color="@color/button_pressed" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp" />
    </shape>
</item>

<item android:state_focused="true" >
    <shape>
        <gradient
            android:endColor="@color/info_normal"
            android:startColor="@color/info_normal"
            android:angle="270" />
        <stroke
            android:width="3dp"
            android:color="@color/info_normal" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp" />
    </shape>
</item>

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

Как Вы видите в коде, я устанавливаю цвет текста, и я уверен, что этот цвет существует как ресурс (спасибо IntelliJ).

Но установка цвета текста как это не имеет никакого эффекта вообще, цвет текста на кнопке, кажется, более темный оттенок цвета фона кнопки.

Если кто-либо мог бы дать мне некоторый совет относительно того, что попробовать затем, я буду самым благодарным.

9
задан Rachel 23 July 2010 в 11:31
поделиться