Alesqui Alesqui - 6 months ago 21
Android Question

Change <layer-item> items by Java code

I have the following XML:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/customPlayerProgressBg">
<shape>
<gradient
android:startColor="#FF999999"
android:endColor="#FF999999"
/>
</shape>
</item>

<item android:id="@+id/customPlayerProgressSecondary">
<clip>
<shape>
<gradient
android:startColor="#FF5C3C68"
android:endColor="#FF5C3C68"
/>
</shape>
</clip>
</item>
<item
android:id="@+id/customPlayerProgress"
>
<clip>
<shape>
<gradient
android:startColor="#FF5C3C68"
android:endColor="#FF5C3C68"
/>
</shape>
</clip>
</item>

</layer-list>


I want to change the "customPlayerProgress" and the "customPlayerProgressSecondary" by Java code. How can that be accomplished?

Joe Joe
Answer

Assuming that you want to have access to them through Java code after they are loaded as a Drawable in your app, you should be able to do something like the following:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.my_drawable);
    final ClipDrawable d1 = (ClipDrawable) ld.findDrawableByLayerId(R.id.customPlayerProgress);
    final ClipDrawable d2 = (ClipDrawable) ld.findDrawableByLayerId(R.id.customPlayerProgressSecondary);

    /* modify ld, d1 and d2 by calling their methods here */
}

Also look at this for some more ideas.