我使用这种样式来改变我的 Button
的背景颜色:
<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"/>
它有效。但是当我在这个 Button
上调用 setEnabled(false)
时,它保持相同的颜色。我该如何处理这种情况?
最佳答案
您没有正确使用 Widget.AppCompat.Button.Colored
样式。您正在使用父样式 (Widget.AppCompat.Button.Colored
),但将其作为主题应用。这实际上意味着 Widget.AppCompat.Button.Colored
部分被完全忽略,而您只是更改按钮的默认颜色(有效,但不处理禁用的情况)。
相反,您应该使用 ThemeOverlay
并单独应用 Colored
样式:
<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"/>
如 this answer on using the Widget.AppCompat.Button.Colored
style 中所述,禁用颜色由 colorButtonNormal
控制,启用颜色由 colorAccent
控制。通过使用 ThemeOverlay.AppCompat.Dark
,textColor
会自动变为深色,这意味着您可能根本不需要自定义 ThemeOverlay
。
关于android - 如何使用 AppCompat 设置按钮的禁用颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35810614/