获取当前背景

Get current background

我想获取当前背景,以此为基础做一个条件。 例如,我有一个带有下一个箭头的xml,如果背景=R.drawable.A,我想在按下下一个按钮时将背景更改为R.drawable.B。

我定义我的相对布局如下:

final RelativeLayout rl = (RelativeLayout) findViewById(R.id.myLayout);

if (rl.getBackground()== R.drawable.A){ //here the error
        rl.setBackgroundResource(R.drawable.B);
                }

错误是: 不兼容的操作数类型 int 和 drawable。 有没有办法获取当前背景并以此为基础做点什么?

其实我不知道他们为什么不覆盖 Drawable class. So you should use getConstantState() method from the Drawable object that returns a Drawable.ConstantState 实例中的 equals 方法,该实例持有此 Drawable 的共享状态以便能够比较它。

科特林

val drawableAConstantState = ContextCompat.getDrawable(this, R.drawable.A)?.constantState
rl.setBackgroundResource(if (rl.background?.constantState == drawableAConstantState) R.drawable.B else R.drawable.A)

Java

if (rl.getBackground() != null && rl.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.A).getConstantState()) {
    rl.setBackgroundResource(R.drawable.B);
} else {
    rl.setBackgroundResource(R.drawable.A);
}

您可以像这样检查背景可绘制对象是否为空:

if (rl.getBackground() != null){ 
    rl.setBackgroundResource(R.drawable.B);
 }else{
 // do whatever you want
}

要纠正这个错误,只需将其更改为:

final RelativeLayout rl = (RelativeLayout) findViewById(R.id.myLayout);

if (rl.getBackground() == getResources().getDrawable(R.drawable.A){ //<-- fixes the error
        rl.setBackgroundResource(R.drawable.B);
}

旁注:我建议您检查应根据逻辑组件设置哪个可绘制对象,而不是它在 UI 中的表现形式,但这取决于您.