如何自定义AppCompat材质按钮样式?

时间:2015-01-22 19:34:21

标签: android android-ui android-theme android-appcompat

我正在使用AppCompat主题,我想在我的按钮上设置minHeight属性:

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="android:buttonStyle">@style/MyButtonStyle</item>
</style>

<style name="MyButtonStyle" parent="...?">
    <item name="android:minHeight">60dp</item>
</style>

但是,没有Widget.AppCompat.Button样式可以设置为MyButtonStyle的父级。如果我使用android:Widget.Button,那么我的所有按钮看起来都像旧的蹩脚风格。我尝试了各种其他AppCompat主题,例如TextAppearance.AppCompat.Button,但它们不起作用。

省略按钮样式的父主题也会导致按钮无法正确设置样式。

如何自定义默认Theme.AppCompat buttonStyle

5 个答案:

答案 0 :(得分:4)

要回答我自己的问题,目前Button小部件显示为AppCompat does not in fact support

  

AppCompat在早期版本的Android上提供类似的行为   对于UI小部件的子集:

     
      
  • AppCompat工具栏提供的所有内容(动作模式等)
  •   
  • 的EditText
  •   
  • 微调
  •   
  • 复选框
  •   
  • 单选按钮
  •   
  • 切换(使用新的android.support.v7.widget.SwitchCompat)
  •   
  • CheckedTextView
  •   

我看到的唯一解决方法是从Android源代码重新创建Material按钮样式,这项任务超出了我的愿望范围。

答案 1 :(得分:3)

您可以在API 14+(Base.MyButtonStyle)和android:Widget.Holo.Button上使用res/values-v14/styles.xml扩展android:Widget.Material.Button API上的res/values-v21/styles.xmlMyButtonStyle。根据设备系统版本进行更改。在此处进行平台特定修改。

然后让Base.MyButtonStyle扩展android:minHeight并在此处定义res/values/styles.xml(在MyButtonStyle中)。这将适用于所有平台。

然后您可以使用样式{{1}}。

此示例假设您的最低SDK为14。

是的,没有appcompat-v7按钮样式(好吧,至少还没有)。

修改

这假设您在比Lollipop更早的平台上使用Holo按钮。它感觉不引人注目,如果你能做到没有涟漪,它应该没问题。如果你想要涟漪,我建议你去谷歌第三方棒棒糖按钮库。

答案 2 :(得分:2)

使用AppCompat +22自定义按钮样式 在你的styles.xml中

<style name="Button.Tinted" parent="Widget.AppCompat.Button">
        <item name="colorButtonNormal">YOUR_TINT_COLOR</item>
        <item name="colorControlHighlight">@color/colorAccent</item>
        <item name="android:textColor">@android:color/white</item> </style>
中的

<Button
        android:id="@+id/but_next"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/but_continue"
        android:theme="@style/Button.Tinted" />

答案 3 :(得分:0)

删除android:

<style name="Theme.MyTheme" parent="Theme.AppCompat">
    <item name="buttonStyle">@style/MyButtonStyle</item>
</style>

https://stackoverflow.com/a/32363833

答案 4 :(得分:0)

使用新的 MaterialComponent ,可以方便地使用com.google.android.material.button.MaterialButton而不是常规的Button

但是要设置样式,主题中使用了不同的属性  -materialButtonStyle,具有此父主题Theme.MaterialComponents.DayNight.NoActionBar

然后主题应如下所示:

<style name="NewAppTheme" 
       parent="Theme.MaterialComponents.DayNight.NoActionBar">
    .......
    <-- IMPORTANT if you are using com.google.android.material.button.MaterialButton to style them use this parameter
    <item name="materialButtonStyle">@style/ButtonStyle</item>
</style>

ButtonStyle中,您可以更改按钮属性,如下所示:

<style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    <item name="android:minHeight">60dp</item>
</style>