Android改变默认按钮背景颜色



我试图改变按钮的背景颜色(默认,按下和焦点),但我找不到一个好方法。我读过很多关于按钮样式的帖子,但不幸的是,这些帖子都是为了创建一个竞争的新样式。我想保持所有的东西不变,除了背景颜色。

我更喜欢使用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" />

最新更新