1

我们知道在 android 应用程序中,我们可以通过使用SetButtonDrawablexml 文件来更改复选框的背景颜色。

此 xml 文件可以使用渐变或在可绘制对象中使用图像的简单文件来定义。本文展示了一个带有渐变的示例:Android: Set color of CheckBox

这也是我使用的另一个示例:

 <item android:state_checked="true">
    <layer-list>
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#9b9b9b" />
                <corners android:radius="5dp" />

            </shape>
        </item>
        <item android:top="2dp" android:left="1.5dp" >
            <shape  android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item>
            <bitmap android:gravity="center" android:src="@drawable/tick_red_icon"/>
        </item>
    </layer-list>
</item>
<item >
    <layer-list>
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#9b9b9b" />
                <corners android:radius="5dp" />
            </shape>
        </item>
        <item android:top="2dp" android:left="1.5dp" >
            <shape  android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="2dp" android:left="1.5dp">
            <shape  android:shape="rectangle">
                <solid android:color="#e5e4e4" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
    </layer-list>
</item>

我们还知道,如果我们想改变渐变颜色,我们需要DrawableGradient在运行时将其定义为 a ,然后使用它。

问题是这样的:我们如何定义一些像上面这样复杂的渐变,DrawableGradient以便能够在运行时改变它们的颜色?

或者如果有一个不好的解决方案,有没有更好的解决方案,我们设置复选框的背景颜色并可以在运行时更改它们的颜色?

4

1 回答 1

0

最后通过研究,我找到了这篇文章,并在此基础上开发了一个代码,即这个问题的答案。

我们必须在单独的 xml 文件中定义每一层,如下所示:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#9b9b9b" />
                <corners android:radius="5dp" />

            </shape>
        </item>
        <item android:top="2dp" android:left="1.5dp" >
            <shape  android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp" android:id="@+id/mainImage">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item android:top="2dp" android:bottom="1dp" android:left="1.5dp" android:id="@+id/TheinImage">
            <shape  android:shape="rectangle">
                <gradient android:startColor="#ff7dbce9" android:endColor="#ff2578b3" android:angle="270" />
                <corners android:radius="5dp" />
                <size android:height="20dp" android:width="20dp" />
            </shape>
        </item>
        <item>
            <bitmap android:gravity="center" android:src="@drawable/ic_menu_ca_dis"/>
        </item>
    </layer-list>

然后通过在运行时检索它们,我们可以更改它们的项目。(层是我的 xml 文件的名称)

GradientDrawable gd = new GradientDrawable
            (GradientDrawable .Orientation .TopBottom,
             new int[]{Color.Red , Color.Green });
        gd.SetStroke (10, Color.Blue );
LayerDrawable ld = (LayerDrawable) Resources .GetDrawable  (Resource .Drawable.Layer   );
        bool testfactor = ld.SetDrawableByLayerId (Resource .Id.mainImage , gd);

现在,通过使用StateListDrawable我们可以定义女巫状态与女巫层相关:

    StateListDrawable states = new StateListDrawable();
        states.AddState (new int[] {Android .Resource .Attribute .StateChecked },
        ld);
        states.AddState(new int[] { },
        Resources .GetDrawable (Resource .Drawable .ic_menu_ca_dis   ) );

现在,您可以加入在运行时更改此 xml :)

于 2013-01-27T16:48:11.667 回答