Вот метод setBackgroundColor
для установки вида фона. мы также можем использовать setBackground
для установки. мы видим, что они исходный код.
public void setBackgroundColor(@ColorInt int color) {
if (mBackground instanceof ColorDrawable) {
((ColorDrawable) mBackground.mutate()).setColor(color);
computeOpaqueFlags();
mBackgroundResource = 0;
} else {
setBackground(new ColorDrawable(color));
}
}
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
параметр для setBackgroundColor
- это цвет int, но API дает метод getBackground
, он возвращает drawable.
public Drawable getBackground() {
return mBackground;
}
, поэтому мы можем сделать следующее:
Drawable background = v1.getBackground();
v2.setBackground(background)
В то же время, если мы хотим использовать setBackgroundColor
, мы должны получить цвет int , но для этого требуется фон ColorDrawable
ColorDrawable background = (ColorDrawable)v1.getBackground();
int color = background.getColor();
v2.setBackgroundColor(color)
, поэтому я предлагаю вам использовать первый способ. что делает два вида фона одинаковыми.
по той причине, почему вы не можете напрямую присвоить значение. потому что после установки фона поток пользовательского интерфейса в android должен перерисовать , в этом случае конфигурация может дать эффект. если вы хотите узнать больше, вы можете увидеть метод setBackgroundDrawable
в исходном коде.