CheckingButton背景资源ID android

时间:2013-04-24 12:07:15

标签: android android-button

我有一个按钮

Button button = (Button)findViewById(R.id.button);
button.setBakgroundResource(R.drawable.icon);

如果我想检查哪个背景资源按钮,是否可以这样做?如何。

例如:

if (button.getResourceId()==R.drawable.icon)

做点什么......

更新:条件错误我希望图片不匹配

vi.findViewById(R.id.button1).setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            v.findViewById(R.id.button1).setBackgroundResource(R.drawable.boutton_off);

            Drawable aImg = (Drawable)v.findViewById(R.id.button1).getBackground();
            Drawable bImg = v.getResources().getDrawable(R.drawable.boutton_off);

            if(aImg==bImg){

                System.out.println("On");

            }else 
                System.out.println("off");



            //main.popMessage(position);


        }

    }); 

8 个答案:

答案 0 :(得分:4)

如果要为按钮设置多个可绘制背景,请按以下步骤进行检查

    if(button.getBackground().getConstantState()==getResources().getDrawable(R.drawable.name1).getConstantState())
{
//Your code
}
else if(button.getBackground().getConstantState()==getResources().getDrawable(R.drawable.name2).getConstantState())
{
//Your code
}
else
{
//Your code
}

如果以上代码无效,您可以使用button.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.name1).getConstantState())

答案 1 :(得分:3)

似乎不可能。将资源解析为Drawable,这就是您可以在标准功能中获得的所有内容。也许有一种方法可以用另一种方式将drawable重新解析为id,但是这个功能并没有在buttonclass中实现。

如果您需要轻松访问该resourceId并且您正在从代码设置ressource,您可以编写实现Android Button的ButtonClass并重载/创建setBackgroundResource以将id保存在您可以访问的其他字段中。 当然,这不起作用,如果按钮得到他的BackgroundRessource不是由于你身边的函数调用。

这里有一些代码。

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;

public class MyButton extends Button {
    private int bgId;

    public MyButton(Context context) {
        super(context);
    }
    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MyButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void setBackgroundResource(int resId) {
        super.setBackgroundResource(resId);
        bgId = resId;   
    }

    public int getBackgroundId() {
        return bgId;
    }
}

答案 2 :(得分:1)

我通过使用hashmap解决了这个问题。经过大量浪费时间搜索如何获取后台资源。当我想设置背景资源但我也不想失去我设置的东西时,我做了类似的事情:

HashMap<Button,Integer> hashMap;
myButton.setBackgroundResources(R.drawable.my_image);
hashMap.put(myButton,R.drawable.my_image);

现在,如果您想将该图像与另一个图像进行比较:

if(hashMap.get(myButton)==R.drawable.my_image)
{
 myButton.setBackgroundResources(R.drawable.another_image);
 hashMap.put(myButton,R.drawable.another_image);
}

请记住:如果您使用现有密钥放置其他资源,则会覆盖该值不要忘记在使用之前初始化hashmap 所有人都希望这对你有所帮助。

答案 3 :(得分:0)

我认为getBackground()就是你要找的。它返回一个drawable,所以你可以这样检查:

Button myButton = ...;
Drawable myDrawable = getResources().getDrawable(R.drawable. ... ); //the one you are looking for
if(myButton.getBackground().equals(myDrawable)){
....
}

答案 4 :(得分:0)

[cell.checkboxBtn addTarget:self action:@selector(CheckBoxSelection:) forControlEvents:UIControlEventTouchUpInside];
[cell.checkboxBtn setTag:indexPath.row];
if ([[chechBoxList objectAtIndex:indexPath.row] isEqualToString:@"0"]) {

    [cell.checkboxBtn setBackgroundImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];

}
else{
    [cell.checkboxBtn setBackgroundImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal];
}


button CheckBoxSelection:-

-(void)CheckBoxSelection:(UIButton *)sender{
 if ([sender isSelected])
 {
    [chechBoxList replaceObjectAtIndex:sender.tag withObject:@"0"];
    [self.tableViewUninvitedFriend reloadData];
    [sender setSelected:NO];
}
else
{

     [chechBoxList replaceObjectAtIndex:sender.tag withObject:@"1"];
     [self.tableViewUninvitedFriend reloadData];
     [sender setSelected:YES];

}
}

答案 5 :(得分:0)

@Nihal 的回答很好,但是 getResources() 现在已被弃用,在这种情况下,您可以直接转到 getDrawable()

对于 Java:

    if(button.getBackground().getConstantState()==getDrawable(R.drawable.name1).getConstantState())
{
//Your code
}
else if(button.getBackground().getConstantState()==getDrawable(R.drawable.name2).getConstantState())
{
//Your code
}
else
{
//Your code
}

对于科特林

   if(button.background.constantState==getDrawable(R.drawable.name1)?.getConstantState){
//Your code
}
else if(button.background.constantState==getDrawable(R.drawable.name2)?.getConstantState){
//Your code
}
else
{
//Your code
}

答案 6 :(得分:-1)

你可以这样做...... 1.无论您为按钮设置了什么背景,还将此背景设置为按钮的ID.Means button.setId(R.drawable.image);

2.然后检查条件..

int temp = button.getId();
    if(temp == R.drawable.image){
    //Do something...
    }

希望它对你有所帮助......

答案 7 :(得分:-1)

Drawable aImg = (Drawable)done.getBackground();
Drawable bImg = getResources().getDrawable(R.drawable.ic_launcher);
if(aImg==bImg){

}