我可以为不同的颜色按钮定义一个可绘制的选择器吗?

时间:2014-11-07 07:08:24

标签: android android-button android-drawable android-selector

我想在按钮上添加一些点击效果,所以我定义了一个可绘制的b1.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#cf00" />
        </shape>
    </item>
    <item>
        <shape>
            <solid
                android:color="#f00" />
        </shape>
    </item>
</selector>

然后我将其应用于按钮背景

<Button
        android:id="@+id/main_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="btn"
        android:background="@drawable/b1"
        android:textColor="#fff"
        android:textSize="15sp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:padding="10dp"
        android:gravity="center"
        />

但是应用程序中有20多种不同的颜色按钮,我不想为每个按钮创建许多可绘制的按钮。如果我在后台使用drawable,我无法为这样的按钮设置背景颜色。如果我在背景中使用颜色,我无法将drawable设置为这样的按钮。

我可以定义一个只有按下样式的drawable吗?当按下按钮时,为按钮添加一些透明。同时,我可以在每个按钮中定义不同的颜色。

2 个答案:

答案 0 :(得分:0)

您可以更改应用的主题,假设所有按钮都具有相同的默认/聚焦颜色,并且您只希望“按下”状态发生变化。

否则,选择器是您定义每个颜色/透明度选项的方式。使用一组或一组选择器没有“捷径”。

答案 1 :(得分:0)

由于您管理按下颜色的alpha的方式,您的选项有限。它具有相同的颜色,但具有一定的透明度以允许背景颜色融入。如果您在下面有全彩色图像,那么这样做的一个很好的理由。有二十种按钮颜色,很难看出情况如此​​。

因此,如果您使用的是纯色背景,那么您可以将每个按钮包装在FrameLayout中。将每个Frame布局的背景颜色设置为按钮颜色。将drawable按钮设置为使用#3xxx(其中xxx =你的bg颜色)。混合到按钮上的背景#3xxx与将按钮颜色的#C___混合到背景颜色(十六进制F-3 = C)相同。将可绘制按钮的正常状态设置为透明(@android:颜色/透明),以允许显示按钮的完整颜色。