I have the following LayerDrawable
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/image_source"
android:bottom="6dp"
android:drawable="@drawable/default"
android:left="14dp"
android:right="14dp"
android:top="6dp">
</item>
<item android:drawable="@drawable/metaphor_photo_portrait"/>
</layer-list>
I need to be able to dynamically sustitute the image in @+id/image_source
from the code. I succeeed to do on Honeycomb+ devices using:
mLayerDrawable.setDrawableByLayerId(R.id.image_source, drawable);
mLayerDrawable.invalidateSelf();
However, this does not work on Gingerbread devices as setDrawableByLayerId
is unstable for Gingerbread devices (link 1, link 2). I am advised to construct the LayerDrawable
from scratch. I started doing that and am currently faced with the problem of setting the intristicInset
of the first layer.
I tried using
mLayerDrawable.setLayerInset(0, dp14, dp6, dp14, dp6);
Where dpxx
are constants I calculate myself. However it seems this method is not working on Gingerbread either (link 1).
Thus I decided to try to do it the other way - set the bounds of the restangle of the drawable I set on the first layer:
drawable.setBounds(dp14, dp6, dp90 - dp14, dp90 - dp6);
Perfect, however it seems that bounds settings on LayerDrawable
layer are ignored (link 1)
Now I am advised to use combination of two image viwes. However my LayerDrawable
is part of LevelListDrawable
and I think that I can not include layout in such.
All in all this leave me not being able to modify the contents of my LayerDrawable
in any way on pre-Honeycomb devices. Any advises on how should I proceed are appreciated!
drawable.setBounds(mLayerDrawable.findDrawableByLayerId(R.id.image_source).getBounds());
mLayerDrawable.setDrawableByLayerId(R.id.image_source, drawable);
mLayerDrawable.invalidateSelf();