我有一个按钮
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);
}
});
答案 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){
}