获取当前背景

时间:2015-01-01 12:16:52

标签: android

我想让当前的背景基于它做一个条件。 例如,我有一个带有下一个箭头的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。 如果有办法获得当前背景并以此为基础做什么?

3 个答案:

答案 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中的表现形式,但这取决于您。