У меня есть 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