我试图改变按钮的背景颜色(默认,按下和焦点),但我找不到一个好方法。我读过很多关于按钮样式的帖子,但不幸的是,这些帖子都是为了创建一个竞争的新样式。我想保持所有的东西不变,除了背景颜色。
我更喜欢使用xml,因为我使用一个单一的布局多个活动。我也在寻找一个解决方案,适用于android 4.0和4.0以上和以下。
有人能帮帮我吗?
如果你想改变默认的按钮颜色而不失去阴影,那么我建议改变所需按钮的样式。
您可以简单地将这一行添加到按钮标签
style="@style/Widget.AppCompat.Button.Colored"
示例代码如下所示
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.Button.Colored"
android:text="Rate now"/>
现在将colorAccent更改为位于res->values->colors.xml文件下的color.xml中的所需颜色。
<color name="colorAccent">your color here</color>
您可以访问官方开发人员页面获取更多信息样式按钮
按照下面的示例创建一个button_style.xml
,并将该文件放在res
文件夹下的drawable
文件夹中。
<?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/MyButtonDarkGray"
android:endColor="@color/MyButtonDarkGray"
android:angle="270" />
<stroke
android:width="0dp"
android:color="@color/Gray" />
<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/Green"
android:startColor="@color/Green"
android:angle="270" />
<stroke
android:width="0dp"
android:color="@color/Gray" />
<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/green_leaf_top"
android:startColor="@color/green_leaf_bottom"
android:angle="270" />
<stroke
android:width="0dp"
android:color="@color/Gray" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
现在,在resvalues
文件夹下的styles.xml
中,添加
<style name="button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/button_style</item>
</style>
这个样式只适用于你所有的按钮。
注意:颜色在resvaluescolors.xml
中是单独定义的,你可以使用自己的颜色
下面是一个基于按钮状态改变颜色的xml:创建一个可绘制的资源,如下图
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@android:color/black" />
<item
android:state_pressed="true"
android:state_enabled="true"
android:drawable="@android:color/holo_orange_dark" />
<item
android:state_focused="true"
android:state_enabled="true"
android:drawable="@android:color/holo_green_dark" />
<item
android:state_enabled="true"
android:drawable="@android:color/holo_blue_bright" />
</selector>
在java代码中设置可绘制的资源如下:
Button btn = (Button) findViewById(R.id.btn1);
btn.setBackground(this.getResources().getDrawable(R.drawable.mydrawable));
在xml中设置drawable作为xml中按钮的背景:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/mydrawable" />