I have encoutered problem where my layer-list drawable is not rendered fully from time to time.
In my activity's onCreate I have programatically created few TextViews, in onResume I am calling web service and after getting response I am updating this TextViews accordingly.
TextView tv = getView().findViewWithTag(tag);
if ((int) wt.getCustomerId() == Const.CUSTOMER_xxx) {
tv.setBackgroundResource(R.drawable.tile_sended_xxx);
} else {
switch ((int) wt.getActivityId()) {
case Const.ACTIVITY_WALK:
tv.setBackgroundResource(R.drawable.tile_sended_walk);
break;
case Const.ACTIVITY_AUTO:
tv.setBackgroundResource(R.drawable.tile_sended_auto);
break;
default:
tv.setBackgroundResource(R.drawable.tile_sended_work);
break;
}
}
And one of my drawables (blueck background, coffee icon):
<item>
<shape
android:padding="0dp"
android:shape="rectangle">
<solid android:color="@color/tile_sended_xxx"/>
<corners
android:bottomLeftRadius="4dp"
android:bottomRightRadius="4dp"
android:topLeftRadius="4dp"
android:topRightRadius="4dp"/>
</shape>
</item>
<item
android:drawable="@drawable/coffee"
android:gravity="center">
</item>
The problem is that from time to time only backgroud (yellow/blue) is rendered but icon is not visible.
It happens in different emulators, it happens on real device.
I have no idea how to debug/solve that. Any help will be apprecated.
I am adding also some screens to show that Android Studio displays it OK.
Solved, it occured that in some other place I was setting drawables tint color, i.e. to yellow, and that change is saved to resources for later use. Later when layer-list was used then I had yellow (instead of black) drawable on yellow background.
So instead of changing "global" resource:
mutate() should be used to make "local" resource copy: