How can I programmatically change the color (#000000
) of a shape in a layer list?
Here is my layer list:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#000000" /> // CHANGE THIS COLOR </shape> </item> <item android:left="5dp"> <shape android:shape="rectangle"> <solid android:color="@color/bg" /> </shape> </item> </layer-list>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/gradientDrawble"> // Give id <shape android:shape="rectangle"> <solid android:color="#000000" /> // CHANGE THIS COLOR </shape> </item> <item android:left="5dp"> <shape android:shape="rectangle"> <solid android:color="@color/bg" /> </shape> </item> </layer-list>
Then in you code just add
LayerDrawable layerDrawable = (LayerDrawable) getResources() .getDrawable(R.drawable.my_drawable); GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable .findDrawableByLayerId(R.id.gradientDrawble); gradientDrawable.setColor(color); // change color
Update Oct-2016
getDrawable()
is now deprecated, you should use ContextCompat.getDrawable(context, color)
instead.
Beside, if you get the LayerDrawable
by findDrawableByLayerId()
, then you had to call view.setBackground(layerDrawable)
for this to take effect. Alternatively, instantiating the layerDrawable
by view.getBackground()
also worked.
First of all you need to assign id to you layer-list
item.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- First assign id to the list item--> <item android:id="@+id/your_shape"> <shape android:shape="rectangle"> <solid android:color="#000000" /> </shape> </item> <item android:left="5dp"> <shape android:shape="rectangle"> <solid android:color="@color/bg" /> </shape> </item> </layer-list>
Then get your shape by id.
LayerDrawable shape = (LayerDrawable) getResources().getDrawable(R.drawable.your_shape)
And you can change the color of your shape by calling
shape.setColor(Color.Black); // changing to black color
EDIT
As getDrawable()
has been deprecated. Use the following line of code.
LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(YourActivity.this,R.drawable.your_shape)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With