我想让当前的背景基于它做一个条件。 例如,我有一个带有下一个箭头的xml,如果background = R.drawable.A,我想在按下下一个Button时将背景更改为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。 如果有办法获得当前背景并以此为基础做什么?
答案 0 :(得分:3)
实际上,我不知道为什么他们没有覆盖Drawable课程中的equals
方法。因此,您应该使用Drawable对象中的getConstantState()方法,该方法返回一个Drawable.ConstantState实例,该实例保存此Drawable的共享状态,以便能够对其进行比较。
if(rl.getBackground() == null) {
rl.setBackgroundResource(R.drawable.A);
} else if ( rl.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.A).getConstantState()) {
rl.setBackgroundResource(R.drawable.B);
} else {
rl.setBackgroundResource(R.drawable.A);
}
答案 1 :(得分:0)
你可以检查背景drawable是否为null:
if (rl.getBackground() != null){
rl.setBackgroundResource(R.drawable.B);
}else{
// do whatever you want
}
答案 2 :(得分:0)
要纠正错误,只需将其更改为:
final RelativeLayout rl = (RelativeLayout) findViewById(R.id.myLayout);
if (rl.getBackground() == getResources().getDrawable(R.drawable.A){ //<-- fixes the error
rl.setBackgroundResource(R.drawable.B);
}
旁注:我建议您检查哪个drawable应该针对逻辑组件设置而不是它在UI中的表现形式,但这取决于您。