以编程方式更改<item>属性

alv*_*vmz 5 android android-layout

我正在尝试更改按钮的背景,以显示正在运行的后台进程的进度.我正在使用由两种颜色组成的drawable,所以现在我需要以编程方式更改<item>以下layer-list中s 的顶部和底部属性:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:bottom="20dp">
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />
        </shape>
    </item>

    <item android:top="30dp">
        <shape android:shape="rectangle" >
            <solid android:color="#000000" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

我无法选择<item>元素并从java代码中修改它们.

Rid*_*lly 0

更改 XML 无论如何都无济于事,因为 Android 在运行时不会使用它们。相反,请查看 LayerDrawable,因为它是从 XML 创建并在运行时使用的。

所以基本上你可以做类似的事情并从那里继续:LayerDrawable ld = (LayerDrawable)mButton.getBackground();

然而,更好/更简单的方法可能是创建您自己的 Drawable 类,这会相当简单,因为您只有两个矩形要绘制。