繁体   English   中英

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

[英]How to set specific color for background when being clicked on borderless button?

简短问题:

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

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

(或没有“彩色”部分)。

如何将其背景设置为被按下时具有不同颜色的选择器? 默认的棒棒糖上的颜色是粗体...

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

我认为最简单的方法是创建一个典型的多状态可绘制对象,并复制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>

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

您可以看到它只是具有以下多状态可绘制对象的图层列表:

<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>

因此,只需将其设为您的:)将可绘制的xml复制到您的应用中并对其进行自定义。

我不知道你是否将能够访问@dimen/...从SDK包以外,这些值在SDK中定义Values.xml ,看看https://github.com/dandar3/ android-support-v7-appcompat / blob / master / res / values / values.xml 如果这是不可能的,只是在你创建你自己的梦诗的版本values.xml

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

要求的更新

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

我建议使用LightningColorFilter 要将滤色镜应用于“按钮”或任何视图,您可以执行以下操作

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

在这里查看每种颜色的含义: http : //developer.android.com/reference/android/graphics/LightingColorFilter.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM