更改默认按钮样式

Change default button style

我想为我的按钮定义默认样式,这样我就不必在每个按钮中手动键入 style="@style/mainButtonStyle"。我已经定义了样式。

    <style name="mainButtonStyle" parent="android:Widget.Material.Button">
        <item name="android:background">@drawable/button_default_background</item>
        <item name="android:textAllCaps">true</item>
        <item name="android:textStyle">bold</item>
        <item name="android:fontFamily">sans-serif-light</item>
    </style>

并且已经在应用的主题中添加了 android:buttonStyle 属性。

themes.xml

 <!-- Base application theme. -->
    <style name="Theme.PlanShopping" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">#AA0000</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="colorSurface">@color/black</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
        <item name="android:buttonStyle">@style/mainButtonStyle</item>
    </style>

Android 清单默认设置了 android:theme 属性。

    <application
        android:name=".PlannerApplication"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.PlanShopping"
        tools:targetApi="31">
        ...
    </application>

为什么不更改默认按钮样式?如果我在按钮内手动键入样式,则该样式可以正常工作。但这不是我想要的结果。我如何设置它为默认值?我尝试继承不同类型的按钮:android:Widget.Buttonandroid:Widget.Holo.Button。此外,不同的 <Button> 类型也没有帮助。现在,我使用默认的 <Button> 组件(不是 material 或 holo)。

如果按钮是 MaterialButton,您需要指定:

<item name="materialButtonStyle">@style/mainButtonStyle</item>