我想稍微更改标准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(一个用于静止按钮,一个用于聚焦,一个用于按下) . 这似乎比我需要的更复杂,更干燥 .
我真正想做的就是对按钮应用某种颜色转换 . 是否有更简单的方法来改变按钮的颜色而不是我正在做的事情?
18 回答
迈克,您可能对彩色滤光片感兴趣 .
一个例子:
试试这个来达到你想要的颜色 .
我正在使用这种方法
style.xml
从上面可以看出,我正在为我的按钮使用自定义样式 . 按钮颜色对应于强调颜色 . 我发现这比设置_348257更好,因为我不会失去Google提供的连锁反应 .
以这种方式使用它:
我发现这一切都可以很容易地在一个文件中完成 . 将类似下面的代码放在名为
custom_button.xml
的文件中,然后在按钮视图中设置background="@drawable/custom_button"
:您可以将按钮的主题设置为此
一种简单的方法是只定义一个自定义Button类,它接受所需的所有属性,如半径,渐变,按下的颜色,正常颜色等,然后在XML布局中使用它而不是使用XML设置背景 . 样本是here
如果您有许多具有相同属性(如半径,选定颜色等)的按钮,则此功能非常有用 . 您可以自定义继承按钮处理这些额外的属性 .
结果(未使用背景选择器) .
Normal Button
Pressed Button
您还可以使用此在线工具自定义按钮http://angrytools.com/android/button/并使用
android:background="@drawable/custom_btn"
在布局中定义自定义按钮 .我喜欢@conjugatedirection和@Tomasz先前答案中的滤色器建议;但是,我发现到目前为止提供的代码并不像我预期的那样容易应用 .
首先,没有提到 where 来应用和清除滤色器 . 有可能还有其他好的地方可以做到这一点,但我想到的是OnTouchListener .
从我对原始问题的解读,理想的解决方案将是不涉及任何图像的解决方案 . 如果这是你的目标,使用@emmby中的custom_button.xml接受的答案可能比彩色滤镜更合适 . 在我的例子中,我从一个UI设计师的png图像开始,按钮应该是什么样子 . 如果我将按钮背景设置为此图像,则默认的高光反馈将完全丢失 . 此代码使用程序化变暗效果替换该行为 .
我把它作为一个单独的类提取出来,用于应用于多个按钮 - 显示为匿名内部类只是为了得到这个想法 .
继Tomasz的回答之后,您还可以使用PorterDuff乘法模式以编程方式设置整个按钮的阴影 . 这将改变按钮颜色而不仅仅是色调 .
如果您从标准灰色阴影按钮开始:
会给你一个红色阴影按钮,
会给你一个绿色阴影按钮等,其中第一个值是十六进制格式的颜色 .
它的工作原理是将当前按钮颜色值乘以颜色值 . 我相信你可以用这些模式做更多的事情 .
如果要使用XML制作颜色按钮,可以通过在单独的文件中指定聚焦和按下状态并重复使用来使代码更清晰 . 我的绿色按钮看起来像这样:
我做一个非常好的按钮样式按钮的方式是子类Button对象并应用颜色过滤器 . 这也通过对按钮应用alpha来处理启用和禁用状态 .
这是我的解决方案,完美起作用 from API 15 . 此解决方案保留所有默认按钮单击效果,如材料
RippleEffect
. 我没有在较低的API上测试它,但它应该工作 .您需要做的就是:
1)创建仅更改
colorAccent
的样式:2)将这两行添加到
button
小部件:示例按钮小部件
DroidUX组件库有一个ColorButton小部件,其颜色可以通过xml定义和运行时以编程方式轻松更改,因此您甚至可以让用户在应用程序允许的情况下设置按钮的颜色/主题 .
现在有一种更简单的方法:android-holo-colors.com
它可以让你轻松改变所有holo drawables(纽扣,旋转器......)的颜色 . 您选择颜色,然后下载包含所有分辨率的drawable的zip文件 .
The shortest solution which is working with any Android version:
Notes/Requirements :
使用
app:
命名空间和 notandroid:
命名空间!appcompat版本> 24.2.0
依赖{compile'com.android.support:appcompat-v7:25.3.1'}
Explanation :
在
<Button>
中使用android:background="#33b5e5"
. 或更好android:background="@color/navig_button"
值\ styles.xml
然后:
您现在还可以将appcompat-v7的AppCompatButton与
backgroundTint
属性一起使用: