单击无边框按钮时如何设置背景的特定颜色?

时间:2016-02-03 15:49:35

标签: android button android-support-library android-selector

简短的问题:

假设我在按钮上使用此样式:

    <Button
        style="@style/Widget.AppCompat.Button.Borderless.Colored" ...

(或没有&#34;有色&#34;部分)。

如何将其背景设置为按下时具有不同颜色的选择器?在Lollipop之前默认的颜色是一个大胆的颜色...

除了选择器的颜色外,我希望所有样式都作为默认样式(包括填充)。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是创建一个典型的多状态drawable并复制Android的默认按钮可绘制属性以进行填充等...

来自Android SDK AppCompat主题:

<!-- Colored bordered ink button -->
    <style name="Base.Widget.AppCompat.Button.Colored">
        <item name="android:background">@drawable/abc_btn_colored_material</item>
        <item name="android:textAppearance">@style/TextAppearance.AppCompat.Widget.Button.Inverse</item>
    </style>

他们使用drawable abc_btn_colored_material,其来源如下:https://github.com/dandar3/android-support-v7-appcompat/blob/master/res/drawable/abc_btn_borderless_material.xml

您可以看到它只是一个包含以下多状态drawable的图层列表:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
    <item android:state_pressed="true" android:drawable="@drawable/abc_btn_default_mtrl_shape"/>
    <item android:drawable="@android:color/transparent"/>
</selector>

https://github.com/dandar3/android-support-v7-appcompat/blob/master/res/drawable/abc_btn_default_mtrl_shape.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="@dimen/abc_button_inset_horizontal_material"
       android:insetTop="@dimen/abc_button_inset_vertical_material"
       android:insetRight="@dimen/abc_button_inset_horizontal_material"
       android:insetBottom="@dimen/abc_button_inset_vertical_material">
    <shape android:shape="rectangle">
        <corners android:radius="@dimen/abc_control_corner_material" />
        <solid android:color="@android:color/white" />
        <padding android:left="@dimen/abc_button_padding_horizontal_material"
                 android:top="@dimen/abc_button_padding_vertical_material"
                 android:right="@dimen/abc_button_padding_horizontal_material"
                 android:bottom="@dimen/abc_button_padding_vertical_material" />
    </shape>
</inset>

所以只需将它改成你的:)将drawable xml复制到你的应用程序中并进行自定义。

我不知道您是否能够从SDK包外部访问@dimen/...,这些值是在SDK Values.xml中定义的,请查看{{3} }。如果不可能,只需在values.xml

中创建自己的尺寸版本

如果有任何安卓大师可以指出的更清洁的解决方案,我会很高兴知道!

请求更新

另一个技巧是将ColorFilter应用于整个Button View。这是一个非常简单的事情,但对所有情况都没有用,因为滤色器会盲目地改变整个视图(包括字体颜色,边框等等)。但是,在颜色上巧妙地选择Alpha可能适用于特定情况。

我建议LightningColorFilter。要将颜色过滤器应用于Button或任何视图,您可以执行类似

的操作
myButton.getBackground().setColorFilter(new LightingColorFilter(Color.WHITE, Color.RED));

查看每种颜色的含义:https://github.com/dandar3/android-support-v7-appcompat/blob/master/res/values/values.xml