小编典典

具有不同颜色的标准 Android 按钮

all

我想稍微更改标准 Android 按钮的颜色,以便更好地匹配客户的品牌。

到目前为止,我发现做到这一点的最好方法是将Button‘s drawable 更改为位于以下位置的 drawable
res/drawable/red_button.xml

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
    <item android:drawable="@drawable/red_button_rest" />
</selector>

但要做到这一点,我实际上需要为我想要自定义的每个按钮创建三个不同的可绘制对象(一个用于静止按钮,一个用于聚焦时,一个用于按下时)。这似乎比我需要的更复杂和非干燥。

我真正想做的就是对按钮应用某种颜色变换。有没有比我更简单的方法来改变按钮的颜色?


阅读 106

收藏
2022-03-02

共1个答案

小编典典

我发现这一切都可以很容易地在一个文件中完成。将类似于以下代码的内容放入名为的文件中custom_button.xml,然后background="@drawable/custom_button"在按钮视图中进行设置:

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

    <item android:state_pressed="true" >
        <shape>
            <gradient
                android:startColor="@color/yellow1"
                android:endColor="@color/yellow2"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                android:endColor="@color/orange4"
                android:startColor="@color/orange5"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>        
        <shape>
            <gradient
                android:endColor="@color/blue2"
                android:startColor="@color/blue25"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
2022-03-02