【问题标题】:Can I define one drawable selector for different color button?我可以为不同颜色的按钮定义一个可绘制选择器吗?
【发布时间】:2015-01-03 22:20:10
【问题描述】:

我想给按钮添加一些点击效果,所以我定义了一个可绘制的 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只有按下的样式吗?当按下按钮时,为按钮添加一些透明。同时,我可以为每个按钮定义不同的颜色。

【问题讨论】:

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


    【解决方案1】:

    由于您管理所按下颜色的 Alpha 的方式,您的选择是有限的。它是相同的颜色,但具有一定的透明度,可以让背景颜色融入其中。这样做的一个很好的理由是,如果您在下面有全彩色图像。有二十种按钮颜色,很难看出这种情况。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-12-08
        • 2021-09-15
        • 1970-01-01
        • 2015-02-28
        • 2011-12-05
        • 1970-01-01
        • 2015-02-24
        • 2015-12-13
        • 1970-01-01
        相关资源
        最近更新 更多