具有不同背景和突出显示颜色的凸起和平按钮

Raised and flat buttons with different background and highlight colors

我正在使用 com.android.support:appcompat-v7:23.0.1 库创建应用程序。

我在values/styles.xml中定义应用主题:

<style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="colorControlHighlight">@color/highlight_dark</item>
    <item name="colorButtonNormal">@color/primary</item>
    <item name="android:textColorPrimary">@color/primary_text</item>
    <item name="android:textColorSecondary">@color/secondary_text</item>
</style>

<style name="AppTheme" parent="BaseAppTheme"></style>

我对凸起按钮使用 AppCompat Widget.AppCompat.Button.Colored 样式,对平面按钮使用 Widget.AppComap.Button.Borderless.Colored 样式。

colorAccent 主题属性定义凸起按钮背景颜色和平按钮文本颜色但我认为这是一个错误,因为这些颜色应该由 colorButtonNormal 属性定义,就像 [=17] =] 和 Widget.AppComap.Button.Borderless 样式。

colorControlHighlight 主题属性定义了两个按钮的 ripple 颜色。

问题是:

  1. 如何使用不同颜色的凸起按钮?例如,我想要带有主色和强调色的按钮。
  2. 我的强调色不浅,所以凸起的按钮有饱和的背景,colorControlHighlight 应该是浅色 (#40ffffff)。但是平面按钮有透明背景,colorControlHighlight 应该是深色的 (#40000000)。如何为凸起按钮和扁平按钮设置不同的 ripple 颜色?

我在下面添加了我当前的解决方案,但我不禁觉得我错过了什么。

经过一些研究和谷歌搜索后,我为不同的凸起按钮和扁平按钮定义了单独的主题:

<style name="AppTheme.RaisedButton">
    <item name="buttonStyle">@style/Widget.AppCompat.Button.Colored</item>
</style>

<style name="AppTheme.RaisedButton.Primary">
    <item name="colorAccent">@color/primary</item>
</style>

<style name="AppTheme.RaisedButton.Accent">
</style>

<style name="AppTheme.FlatButton">
    <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless.Colored</item>
    <item name="colorControlHighlight">@color/highlight_light</item>
</style>

<style name="AppTheme.FlatButton.Primary">
    <item name="colorAccent">@color/primary</item>
</style>

<style name="AppTheme.FlatButton.Accent">
</style>

请注意,我使用的是 buttonStyle 属性而不是 android:buttonStyle,因为它不适用于棒棒糖之前的设备。

android:theme 属性中使用这些主题:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/my_button"
    android:theme="@style/AppTheme.FlatButton.Primary" />