在今天AppCompat更新出来之前,我可以改变Android L中按钮的颜色,但在旧版本上不行。在包含新的AppCompat更新后,我无法更改两个版本的颜色,当我尝试时,按钮就消失了。有人知道怎么改变按钮的颜色吗?

下面的图片展示了我想要达到的目标:

白色按钮是默认的,红色按钮是我想要的。

这是我之前在styles.xml中改变按钮颜色所做的:

<item name="android:colorButtonNormal">insert color here</item>

要动态地进行:

button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);

我也改变了@android:style/ theme . material . light的主题父元素。到Theme.AppCompat.Light.DarkActionBar


当前回答

实际上,我不想改变我的自定义按钮样式,但不幸的是,它们不再工作了。

我的应用程序有一个minSdkVersion 9和一切工作之前。

我不知道为什么,但自从我删除了android:在buttonStyle之前,它似乎又工作了

现在=工作中:

<item name=“buttonStyle”>@style/ButtonmyTime</item>

之前=只是灰色材质按钮:

< name = android: buttonStyle >项目@style ButtonmyTime < - >项目

我没有特殊的文件夹为新的android版本,因为我的按钮是相当平坦的,他们应该看起来在所有android版本相同。

也许有人能告诉我为什么我要删除“机器人”: ImageButton仍在使用“android:”

<item name="android:imageButtonStyle">@style/ImageButtonmyTimeGreen</item>

其他回答

在Android支持库22.1.0中,谷歌使按钮色彩感知。 另一种自定义按钮背景颜色的方法是使用backgroundTint属性。

例如,

<Button
       android:id="@+id/add_remove_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:backgroundTint="@color/bg_remove_btn_default"
       android:textColor="@android:color/white"
       tools:text="Remove" />

这在AppCompat库的v23.0.0中得到了增强 随着更多主题的加入,包括

Widget.AppCompat.Button.Colored

首先,包括appCompat依赖关系(如果还没有的话)

compile('com.android.support:appcompat-v7:23.0.0') {
    exclude group: 'com.google.android', module: 'support-v4'
}

现在因为你需要使用compat的v23版本,你也需要针对SDK-v23 !

    compileSdkVersion = 23
    targetSdkVersion = 23

在你的价值观/主题中

<item name="android:buttonStyle">@style/BrandButtonStyle</item>

在你的价值观/风格中

<style name="BrandButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/yourButtonColor</item>
    <item name="android:textColor">@color/White</item>
</style>

在你的values-v21/样式中

<style name="BrandButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="android:colorButtonNormal">@color/yourButtonColor</item>
    <item name="android:textColor">@color/White</item>
</style>

因为你的按钮主题是基于Widget.AppCompat.Button.Colored按钮上的文本颜色默认是白色!

但似乎有一个问题,当你禁用按钮,按钮将改变其颜色为浅灰色,但文本颜色将保持白色!

解决这个问题的方法是专门将按钮上的文本颜色设置为白色! 正如我在上面所示的风格所做的那样。

现在你可以简单地定义你的按钮,让AppCompat做剩下的:)

<Button
        android:layout_width="200dp"
        android:layout_height="48dp" />

禁用状态

启用状态

编辑:

添加<Button android:theme="@style/BrandButtonStyle"/>

在支持库rev.22中正式修复(2015年3月13日星期五)。参见相关谷歌代码问题:

https://issuetracker.google.com/issues/37008632

使用的例子

theme.xml:

<item name="colorButtonNormal">@color/button_color</item>

v21 / theme.xml

<item name="android:colorButtonNormal">@color/button_color</item>

在我的情况下,而不是使用按钮,我使用androidx. appcompat.com widget. appcompatbutton 这对我很有效。

要支持彩色按钮,请使用最新的AppCompat库(>23.2.1):

膨胀- XML

AppCompat小部件:

android.support.v7.widget.AppCompatButton

AppCompat风格:

style="@style/Widget.AppCompat.Button.Colored"

NB !在xml中设置自定义颜色:使用attr: app而不是android

(使用alt+输入或声明xmlns:app="http://schemas.android.com/apk/res-auto"使用app)

应用:backgroundTint = " @color / your_custom_color”

例子:

<android.support.v7.widget.AppCompatButton
     style="@style/Widget.AppCompat.Button.Colored"
     app:backgroundTint="@color/your_custom_color"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"     
     android:text="Colored Button"/>

或者以编程方式设置- JAVA

 ViewCompat.setBackgroundTintList(your_colored_button,
 ContextCompat.getColorStateList(getContext(),R.color.your_custom_color));