当前位置: 首页 > 知识库问答 >
问题:

如何使用AppCompat设置按钮的禁用颜色?

鄢晔
2023-03-14

我使用此样式更改按钮的背景颜色:

<style name="AccentButton" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/colorAccent</item>
    <item name="android:textColor">@color/white</item>
</style>

在布局中:

    <Button
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/fragment_login_login_button"
        app:theme="@style/AccentButton"/>

它起作用了。但是当我在这个按钮上调用setEnabled(false)时,它保持相同的颜色。我怎么处理这个案子?

共有1个答案

艾仲渊
2023-03-14

您没有正确使用widget.appcompat.button.colored样式。您使用的是父样式(widget.appcompat.button.colored),但将其作为主题应用。这实际上意味着widget.appcompat.button.colored部分将被完全忽略,您只需更改按钮的默认颜色(它可以工作,但不能处理禁用的情况)。

相反,您应该使用ThemeOverlay并单独应用Colord样式:

<style name="AccentButton" parent="ThemeOverlay.AppCompat.Dark">
   <!-- customize colorButtonNormal for the disable color -->
   <!-- customize colorAccent for the enabled color -->
</style>

<Button
    android:id="@+id/login_button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/fragment_login_login_button"
    android:theme="@style/AccentButton"
    style="@style/Widget.AppCompat.Button.Colored"/>

正如关于使用Widget.AppCompat.Button.Colord样式的答案所述,禁用的颜色由ColorButtonNormal控制,启用的颜色由ColorAccent控制。通过使用ThemeOverlay.AppCompat.darkTextColor会自动更改为dark,这意味着您可能根本不需要自定义的ThemeOverlay

 类似资料:
  • 我需要知道使用最新的AppCompat(目前为23.2.1)为材质按钮(AppCompatButton)着色的最佳(推荐)方法是什么。我从来没有想到会如此令人沮丧!我尝试了这里的大多数答案,但要么不起作用,要么产生了意想不到的结果。 我需要保持与api的向后兼容性 如果您能同时提供xml和java代码,我将不胜感激。

  • 问题内容: 我了解到,您可以仅通过将HTML按钮附加到其标签来禁用(使其实际上不可点击),但不能将其作为属性,如下所示: 由于此设置不是属性,因此如何通过JavaScript动态添加此设置以禁用以前启用的按钮? 问题答案: 由于此设置不是属性 这是一个属性。 一些属性定义为布尔值,这意味着您可以指定它们的值,而忽略其他所有内容。即,您只包括粗体部分,而不是disabled =“ disabled

  • 问题内容: 请在http://plnkr.co/edit/9dyBVZh67sxmIqUQB50S?p=preview上的 plunkr代码中查看我的示例 我有4个按钮,其中两个按钮由于某种情况而被禁用。 我希望能够在两个被禁用的按钮上显示工具提示,第一个被禁用的按钮显示“ Test itemName2不可用”,第二个被禁用的按钮显示“ Test itemName4不可用”,而另一个则没有工具提示

  • 问题内容: 我有一个我想将背景颜色更改为白色的。使用“金属外观”时,我可以通过以下方式实现所需的效果setBackground: 具有白色背景的金属外观风格的JButton 不幸的是,使用Windows LAF时,“背景色”的概念有所不同。背景颜色是按钮周围绘制的颜色: Windows外观风格的JButton,带有白色背景 我想使用Windows LAF,但允许将此按钮的颜色JButton更改为白

  • 材料规格显示禁用按钮状态,看起来是灰色的。 https://www.material.io/design/components/buttons.html#切换按钮 只是默认情况下没有在材料Android组件中实现?材料组件是否定义了禁用的按钮状态器?

  • 问题内容: 我不断收到以下错误:AttributeError:’NoneType’对象没有属性’configure’ 问题答案: 执行时,分配给该命令的结果是命令的结果, 而不是 对创建的对象的引用。 您需要在打包/网格化之前分配变量。它看起来应该像这样: