Change <layer-item> items by Java code

2019-02-17 08:27发布

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?

3条回答
贼婆χ
2楼-- · 2019-02-17 08:48

You may be familiar with DOM. You just need to modify the change and then save the file.

Here is an article that may be of some assistance.

查看更多
等我变得足够好
3楼-- · 2019-02-17 09:05

You can't change generated XML files at run-time.

查看更多
该账号已被封号
4楼-- · 2019-02-17 09:06

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.

查看更多
登录 后发表回答