动态设置TextView、Button、ImageView等组件在不同状态下的背景/前景显示效果。
int[][] states = new int[][]
{
new int[]{android.R.attr.state_pressed},
new int[]{android.R.attr.state_focused},
new int[]{android.R.attr.state_activated},
new int[]{}
};
int[] colors = new int[]
{
defaultRippleColor,
defaultRippleColor,
defaultRippleColor,
defaultRippleColor
};
ColorStateList colorStateList = new ColorStateList(states,colors);
设置字体的状态颜色
TextView.setTextColor(colorStateList);
设置背景的状态颜色
StateListDrawable listDrawable = new StateListDrawable();
listDrawable.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(Color.BLACK));
listDrawable.addState(new int[]{android.R.attr.state_focused}, new ColorDrawable(Color.RED));
listDrawable.addState(new int[]{android.R.attr.state_activated}, new ColorDrawable(Color.GREEN));
listDrawable.addState(new int[]{}, new ColorDrawable(Color.TRANSPARENT));
this.setBackground(listDrawable);
设置背景点击纹波效果
setBackground(new RippleDrawable(colorStateList, null, null))
设置图片着色
Drawable drawable = ContextCompat.getDrawable(context, drawableRes);
Drawable targetDrawable = DrawableCompat.wrap(bg);
targetDrawable = targetDrawable.mutate();
DrawableCompat.setTintList(targetDrawable, colorStateList);
DrawableCompat.setTintMode(targetDrawable, PorterDuff.Mode.SRC_ATOP);
imageView.setImageDrawable(targetDrawable);