如何以编程方式添加button色调

在新的AppCompat库中,我们可以按下这个button:

<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/follow" android:id="@+id/button_follow" android:backgroundTint="@color/blue_100" /> 

我如何在代码中以编程方式设置button的色调? 我基本上是试图实现基于一些用户input的button的条件着色

Solutions Collecting From Web of "如何以编程方式添加button色调"

根据文档中android:backgroundTint的相关方法是setBackgroundTintList(ColorStateList list)

更新

按照这个链接了解如何创build一个颜色状态列表资源。

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="#your_color_here" /> </selector> 

然后使用它加载它

 setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name)); 

其中contextInstanceContext一个实例


使用AppCompart

 btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary)); 

你可以使用

 button.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.blue_100))); 

但是我build议你使用昨天刚刚发布的支持库可绘制着色:

 Drawable drawable = ...; // Wrap the drawable so that future tinting calls work // on pre-v21 devices. Always use the returned drawable. drawable = DrawableCompat.wrap(drawable); // We can now set a tint DrawableCompat.setTint(drawable, Color.RED); // ...or a tint list DrawableCompat.setTintList(drawable, myColorStateList); // ...and a different tint mode DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER); 

您可以在此博客文章中find更多内容(请参见“可绘制着色”一节)

似乎意见有自己的色彩pipe理机制,所以更好的将被列为色调列表:

 ViewCompat.setBackgroundTintList( editText, ColorStateList.valueOf(errorColor)); 

你有没有尝试过这样的事情?

 button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100)); 

注意getResources()只能在一个活动中使用。 但是也可以在每种情况下调用。

你可以使用DrawableCompat例如

 public static Drawable setTint(Drawable drawable, int color) { final Drawable newDrawable = DrawableCompat.wrap(drawable); DrawableCompat.setTint(newDrawable, color); return newDrawable; } 

我有一个类似的问题。 我希望基于颜色(int)值为视图着色复杂的可绘制背景。 我成功地使用了代码:

 ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color}); textView.setBackgroundTintList(csl); 

其中颜色是表示所需颜色的整数值。 这代表简单的xml ColorStateList:

 <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="color here"/> </selector> 

希望这可以帮助。

使用:

 favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint