У меня есть 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
возвращает цвет ресурс, основанный на значении апи.
Странно, что в приведенном выше коде установлен цвет isPressed
drawable, но после этого этот drawable не используется. Вместо этого на задний план textView добавляется только notPressed
drawable.
Но цвет фона textView становится цветом isPressed
, который можно вытащить вместо этого! Это должно быть невозможно, поскольку они должны быть двумя разными объектами, даже если они созданы из одного и того же ресурса.
флажка, если 'notPressed = isPressed' Я подозреваю, что оба те же объект. –