如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton

Posted

技术标签:

【中文标题】如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton【英文标题】:How to change background Color to MaterialButton from android.support.design programmatically 【发布时间】:2019-03-04 15:43:06 【问题描述】:

我尝试使用以下代码将颜色更改为 MaterialButton:

var materialButton = findViewByid(R.id....) as MaterialButton
materialButton.setBackgroundColor( ContextCompat.getColor(this@MyActivity, R.color.myCustomColor));

使用普通按钮,它可以工作。 有人有什么想法吗?

【问题讨论】:

它至少适用于com.google.android.material:material:1.2.0-alpha03 【参考方案1】:

对于 C#/Xamarin.Android:

button.BackgroundTintList = ColorStateList.ValueOf(element.Color.ToAndroid());

【讨论】:

【参考方案2】:

materialButton.setBackgroundColor( ContextCompat.getColor(this@MyActivity, R.color.myCustomColor))

使用材料设计依赖性implementation 'com.google.android.material:material:1.2.0-alpha05'

【讨论】:

【参考方案3】:

materialButton.setBackgroundColor(ContextCompat.getColor(this@MyActivity, R.color.myCustomColor));

【讨论】:

【参考方案4】:

我找到了如下答案:

我更改了以下行

materialButton.setBackgroundColor( ContextCompat.getColor(this@MyActivity, R.color.myCustomColor));

materialButton.setBackgroundTintList(ContextCompat.getColorStateList(this@MyActivity, R.color.myCustomColor));

我以这种方式对其进行了测试,并且效果很好。

【讨论】:

真的正确吗? setBackgroundTintList = ... ? 这对我不起作用。有没有其他办法? 这消除了按钮的涟漪效应【参考方案5】:

试试这个

Drawable drawable = DrawableCompat.wrap(mButton.getBackground());
drawable.mutate();
DrawableCompat.setTint(drawable, getResources().getColor(R.color.my_color));
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

【讨论】:

【参考方案6】:

只需在材质按钮内的 XML 文件中调用此属性。

 android:backgroundTint=""

【讨论】:

【参考方案7】:

让我们试试这个:

mButton.getBackground().setColorFilter(getResources().getColor(R.color.indian_red), PorterDuff.Mode.SRC_ATOP);

【讨论】:

这能解决问题吗?还请添加说明。 为我工作,但我们将不胜感激。 这一定是正确答案! 它按我的意愿工作。android 中Background Color 的概念与我的想法不同。很奇怪。 我收到以下代码错误:类型不匹配。必需:滤色器?找到:整数【参考方案8】:

你应该改变你的 colorAccent 来改变你的 materialButton 的背景。

不要使用 android:background 属性。 MaterialButton 管理自己的背景drawable,设置一个新的背景意味着MaterialButton 不能再保证它引入的新属性会正常工作。如果更改默认背景,MaterialButton 无法保证良好定义的行为。

对于填充按钮,此类使用主题的 ?attr/colorAccent 作为背景色,使用白色作为文本颜色。对于未填充的按钮,此类使用 ?attr/colorAccent 作为文本颜色,使用透明作为背景色。

【讨论】:

我无法更改 colorAccent,因为它会更改使用该颜色的其他组件和视图。谢谢你的回答!!

以上是关于如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式更改背景颜色而不影响边框?

从 UIView 以编程方式创建 UIImage

如何以编程方式圆角并设置随机背景颜色

如何以编程方式设置 UINavigationbar 的背景颜色?

以编程方式“闪烁” UITableViewCell 将背景颜色设置为白色

以编程方式更改 UINavigationbar 背景颜色和标题字体/颜色