不同背景和高亮颜色的凸起和扁平按钮

3

我正在使用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属性定义,就像对于Widget.AppCompat.ButtonWidget.AppComap.Button.Borderless样式一样。

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

以下是我的问题:

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

下面是我当前的解决方案,但我感觉可能还遗漏了什么。

1个回答

14

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

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

扎实的答案,文档是如何而不是什么,这真是太傻了。 - JakeWilson801
天啊!为什么谷歌不提供这样的信息,我真是不理解!!这份文档应该展示XML样式,链接在此http://www.google.com/design/spec/components/buttons.html#buttons-button-types - Someone Somewhere

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