Change shape solid color at runtime inside Drawable xml used as background

22,551

Found by me:

    View v = findViewById(R.id.layout_id);

    LayerDrawable bgDrawable = (LayerDrawable)v.getBackground();
    final GradientDrawable shape = (GradientDrawable)   bgDrawable.findDrawableByLayerId(R.id.shape_id);
    shape.setColor(----);
Share:
22,551
ʞᴉɯ
Author by

ʞᴉɯ

#SOreadytohelp

Updated on May 20, 2020

Comments

  • ʞᴉɯ
    ʞᴉɯ almost 4 years

    I've a Drawable xml file (background.xml):

    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <shape>
             ...........
            </shape>
        </item>
    
        <item android:id="@+id/shape_id">
            <shape android:shape="rectangle">
                <solid android:color="#ffefefef" /> 
            </shape>
        </item>
    
    </layer-list>
    

    used by a LinearLayout:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@drawable/background"
        android:id="@+id/layout_id"
        >
    

    Now i need to change the shape shape_id solid color at runtime based on some conditions. How to do this?