如何将样式应用到 Android 应用程序的所有按钮?

140

我的整个应用程序都应用了一个样式:

AndroidManifest.xml:

<application android:theme="@style/ApplicationStyle" android:icon="@drawable/icon" android:label="@string/app_name">

在我的styles.xml文件中:

 <style name="ApplicationStyle" parent="android:Theme">
  <item name="android:button">@style/CKButton</item>
 </style>
 <style name="CKButton" parent="android:style/Widget.Button">
  <item name="android:textSize">19sp</item>
  <item name="android:layout_margin">0dip</item>
  <item name="android:background">#ff0000</item>
 </style>

但是样式没有被应用。

如果我在 - 中使用了错误的名称,我很抱歉,但我不知道在哪里查找对象名称,我只是假定适用于所有按钮。


1
请查看我在 https://dev59.com/hW7Xa4cB1Zd3GeqPlASv#26625931 上的回答。 - Maksim Dmitriev
2个回答

216

对于Android样式,您可以引用Android在R.attr中定义的预设属性。在这种情况下,看起来您想要引用android:buttonStyle。我认为这样做可以:

<style name="ApplicationStyle" parent="android:Theme">
  <item name="android:buttonStyle">@style/CKButton</item>
</style>

1
老天,我找了好久才找到这样的功能。不知道为什么按钮的文本颜色没有遵循主题的文本颜色属性。非常感谢! - Fenix Voltres
有人知道如何在Spinner中实现这个吗? - Mike6679
32
请注意:如果CKButton样式没有继承@android:style/Widget.Button,该按钮将停止工作。 - Erveron
10
parent="android:Widget.Button"parent=@android:style/Widget.Button 之间的区别是什么? - Bugs Happen
1
为什么布局编辑器不能按照主题中设置的按钮样式预览更改? - Shubham AgaRwal

26

对于 Material 组件主题,它应该是这样的:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="materialButtonStyle">@style/AppTheme.Button</item>
</style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接