如何自定义AppCompat材质button样式?

我正在使用AppCompat主题,我想在我的button上设置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 ,那么我所有的button看起来都像旧式的蹩脚风格。 我尝试了像TextAppearance.AppCompat.Button其他AppCompat主题,但他们不工作。

为button样式留出父主题也会导致button的样式不正确。

我如何自定义默认的Theme.AppCompat buttonStyle

  • 以编程方式着色支持向量
  • 带有AppCompat-v7的透明Actionbar 21
  • AppCompat 23.2在API <21上使用带有RemoteViews(AppWidget)的VectorDrawableCompat
  • CoordinatorLayout中的ViewPager意外收缩
  • 操作栏不显示与AppCompat
  • AppCompat和EditText在不同的API上有不同的下划线
  • styles.xml中无法parsing符号'Theme'(Android Studio)
  • 找不到与给定名称匹配的资源'@ style / Theme.AppCompat.Light'
  • 你可以让Base.MyButtonStyle在API 14+(在res/values-v14/styles.xml )和android:Widget.Material.Button on API 21+(在res/values-v21/styles.xml 。这个样式将根据设备的系统版本而改变。

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

    你button,然后可以使用样式MyButtonStyle

    这个例子假设你的最小SDK是14。

    是的,没有appcompat-v7button样式(至less现在还没有)。

    编辑

    这假定你可以在比Lollipop更早的平台上使用Holobutton。 它感觉不显眼,如果你可以没有涟漪,它应该是好的。 如果你想涟漪我build议你谷歌第三方棒棒糖button库。

    为了回答我自己的问题,现在AppCompat实际上并不支持 Button小部件:

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

    • AppCompat工具栏提供的一切(动作模式等)
    • 的EditText
    • 微调
    • checkbox
    • 单选button
    • 切换(使用新的android.support.v7.widget.SwitchCompat)
    • CheckedTextView

    我看到的唯一解决方法是从Android源代码重新创buildMaterialbutton样式,这个任务超出了我的期望范围。

    自定义button样式在styles.xml中使用AppCompat +22

     <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> 

    在你的layout.xml中

     <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" />