获取当前背景
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 中的表现形式,但这取决于您.
我想获取当前背景,以此为基础做一个条件。 例如,我有一个带有下一个箭头的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 中的表现形式,但这取决于您.