具有不同颜色的标准Android按钮
我想稍微更改标准Android按钮的颜色以便更好地匹配客户的品牌。
到目前为止,我发现最好的方法是将Button
的drawable更改为位于res/drawable/red_button.xml
的以下drawable:
<?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>
但是这样做需要我为每个想要自定义的按钮创建三个不同的drawable(一个用于休息按钮,一个用于焦点,一个用于按下时)。 这似乎比我需要的更复杂和非干燥。
我真正想要做的是对按钮应用某种颜色转换。 有没有比改变按钮颜色更简单的方法?
我发现这一切都可以在一个文件中很容易地完成。 将如下代码放在名为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>
继Tomasz的回答之后,您还可以使用PorterDuff乘法模式以编程方式设置整个按钮的阴影。 这将改变按钮的颜色,而不仅仅是色调。
如果您从一个标准的灰色阴影按钮开始:
button.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
会给你一个红色的阴影按钮,
button.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);
会给你一个绿色的阴影按钮等,其中第一个值是十六进制格式的颜色。
它通过将当前按钮颜色值乘以您的颜色值来工作。 我相信你可以用这些模式做更多的事情。
迈克,你可能会对彩色滤光片感兴趣。
一个例子:
button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));
试试这个来达到你想要的颜色。
链接地址: http://www.djcxy.com/p/12945.html