У меня есть TextView с возможностью рисования в качестве фона. Используя объект StateListDrawable, я пытаюсь установить цвет фона программно, но сталкиваюсь с неожиданным поведением: я устанавливаю цвет в одном объекте, а он меняется в другом. Это должно быть невозможно.
Соответствующий код:
GradientDrawable notPressed = (GradientDrawable) getResources().getDrawable(R.drawable.rectangle);
GradientDrawable isPressed = (GradientDrawable) getResources().getDrawable(R.drawable.rectangle);
isPressed.setColor(util.getColour(api, this));
StateListDrawable bg = new StateListDrawable();
// bg.addState(new int[] { android.R.attr.state_pressed }, isPressed);
bg.addState(StateSet.WILD_CARD, notPressed);
textView.setBackgroundDrawable(bg);
Рисуемый:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp" android:color="@color/divider" />
<solid android:color="@color/background_button" />
</shape>
util.getColour возвращает ресурс цвета на основе значения API.
Странно то, что в приведенном выше коде задан цвет isPressed drawable, но после этого этот drawable не используется. Вместо этого к фону textView добавляется только notPressed drawable.
Но вместо этого цвет фона textView становится цветом isPressed! Это должно быть невозможно, так как это должны быть два разных объекта, даже если они созданы из одного и того же доступного для рисования ресурса.
notPressed!=isPressedя подозреваю, что это один и тот же объект. - person Marek R   schedule 20.03.2013