以编程方式更改按钮样式

时间:2014-08-13 11:07:06

标签: android button togglebutton

在我的应用中,用户可以查看他们制作的文档。它包括各种元素,包括按钮 ToggleButtons 。 用户可以设置自定义主题,以更改TextViews / EditTexts中使用的字体和文本颜色以及布局的背景颜色。 所有这些元素都是在运行时生成的。

我想要的是使Buttons / ToggleButtons尊重用户选择的样式。我可以在运行时确定按钮所需的基本背景颜色,但是如果我使用 View.setBackGroundColor()它会变成一个扁平的彩色矩形,而我想保留边框/阴影效果,再加上按下时颜色会发生变化。即我希望它看起来和行为像一个按钮,只是涂上不同的颜色。

是否有可能获得我想要的东西,因为在应用程序运行之前,所需的实际颜色仍然未知?

2 个答案:

答案 0 :(得分:3)

通常使用图像在Android中完成圆角,阴影效果等。请参阅此developer documentation以获取有关其工作原理的说明。

窗口小部件可以具有图像背景或纯色背景。因此,通过设置背景颜色,您将覆盖背景图像。如果您想在不丢失其他所有内容的情况下更改颜色,则需要编辑图像文件。

答案 1 :(得分:0)

通常,您无法以编程方式更改样式;您可以使用主题或样式设置XML布局中的屏幕外观或部分布局或单个按钮。但是,可以通过编程方式应用主题。

还有一个StateListDrawable这样的东西,它允许你为Button可以处于的每个状态定义不同的drawable,无论是聚焦,选择,按下,禁用等等。

例如,要让按钮在按下时更改颜色,您可以定义一个名为res / drawable / my_button.xml目录的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/btn_pressed" />
<item
android:state_pressed="false"
android:drawable="@drawable/btn_normal" />

然后,您可以通过设置属性

将此选择器应用于Button
btn.setBackground(drawable);