禁用按钮背景时如何为其着色

时间:2019-05-16 12:21:48

标签: android android-drawable android-appcompat android-button

我想给片段中定义的按钮上色。我创建了新样式(在按钮中用作主题),并为启用状态定义了“ colorAccent”,为禁用状态定义了“ colorButtonNormal”,该样式的父级为“ Widget.AppCompat.Button”。我希望它的颜色完全与禁用按钮时在colorButtonNormal中编写的一样。

    <style name="Material.Button.Primary" parent="@style/Widget.AppCompat.Button">
        <item name="android:colorButtonNormal">@color/color_disabled</item>
        <item name="colorAccent">@color/color_primary</item>
    </style>
        <Button
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/button_text"
            android:textAppearance="@style/AppTheme.Text"
            android:theme="@style/Material.Button.Primary" />

启用该按钮后,其colorAccent中的颜色正确。当用户单击它时,它会被禁用,应为灰色(#b2b2b2),但会变得更亮一些(#E7E7E7)。似乎需要我定义的颜色并与白色混合。

我试图更改样式的父级,并在样式和按钮的属性上进行了一些更改,因为它们是从互联网上的一些指南中编写的,但是没有任何效果。我当前的解决方案是将colorButtonNormal设置为#000000。禁用按钮后,它将变为#B9B9B9。

1 个答案:

答案 0 :(得分:0)

如果我错了,请原谅我,但据我所知,您希望为启用/禁用状态使用不同的颜色。

更新

为保持物质效果,您可以对Widget.AppCompat.Button.Colored使用样式并创建具有指定颜色的主题:

<Button
.
.
.
    style="@style/Widget.AppCompat.Button.Colored"
    android:theme="@style/CustomButton"/>

并创建主题,其中colorButtonNormal用于禁用状态

<style name="CustomButton" parent="Widget.AppCompat.Button.Colored">
        <item name="colorButtonNormal">@color/color_disabled</item>
        <item name="colorAccent">@color/color_enabled</item>
</style>

没有实质影响的旧

您可以尝试使用选择器,例如:

custom_button.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="@color/color_disabled" />
    <item android:state_enabled="true" android:drawable="@color/color_enabled/>
</selector>

,然后在xml中输入按钮:

<Button
.
.
.
android:background="@drawable/custom_button" />