我想通过java编码创建一些按钮(已完成此部分)。然后在第一次单击时更改每个按钮颜色为绿色,第二次单击为灰色或恢复为默认颜色。我的代码到现在为止。
爪哇
int number = 5; // number of buttons
LinearLayout layout = (LinearLayout) findViewById(R.id.space_layout);
for (int i = 0; i < number; i++) {
myButton = new Button(this);
myButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
myButton.setTag("hello " + i);
myButton.setText("btn " + i);
layout.addView(myButton);
}
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int click = 1;
if (click == 1) {
myButton.setBackgroundColor(Color.GREEN);
click = 0;
} else {
myButton.setBackgroundColor(Color.GRAY);
click = 1;
}
}
});
现在它只将最后一个按钮颜色更改为绿色(但在第二次点击时不会恢复为灰色)。其他按钮不起作用。
请帮我解决这个问题。
答案 0 :(得分:0)
首先,您不能像使用相同名称的循环一样创建按钮。最后,您只需要一个按钮。您需要单独创建它们。
其次,在onClick()
中,每次单击按钮时,都会将click的值设置为1。因此,您始终将背景颜色设置为绿色。
这是你应该做的:
int number = 5; // number of buttons
LinearLayout layout = (LinearLayout) findViewById(R.id.space_layout);
boolean myButtonIsClicked1 = false; // used to check if button has been clicked
myButton1 = new Button(this);
myButton1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
myButton1.setTag("hello 1");
myButton1.setText("btn 1");
layout.addView(myButton1);
并对其他4个按钮执行相同操作
现在您需要为每个按钮设置一个监听器。所以这里将是按钮1的听众:
myButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// You can't have int click = 1 here anymore
// int click = 1;
if (myButtonIsClicked1) {
myButton1.setBackgroundColor(Color.GREEN);
myButtonIsClicked1 = false;
} else {
myButton.setBackgroundColor(Color.GRAY);
myButtonIsClicked1 = true;
}
}
});
并按照与其他4个按钮相同的模式。
希望这有帮助!
答案 1 :(得分:0)
它很容易我想你只需将状态存储在某个地方,最好的地方就是视图本身。
示例代码:
button.onClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
if(view.getTag()==null){
//first time set color to green
view.setTag("green");
view.setBackgroundResource(R.color.green);
}else if(view.getTag().toString().equals("green")){
//green color already set change to grey
view.setBackgroundResource(R.color.grey);
}
}
})
答案 2 :(得分:0)
这很简单。你需要做两件事。
首先,创建一个新的button_background.xml
文件。在里面,把这个:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
<shape android:shape="rectangle">
<solid android:color="@color/green" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/gray" />
</shape>
</item>
</selector>
然后在您的布局的XML中将该drawable设置为按钮的背景。
在java文件中,执行以下操作:
LinearLayout layout = (LinearLayout) findViewById(R.id.space_layout);
for (int i = 0; i < number; i++) {
myButton = new Button(this);
myButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
myButton.setTag("hello " + i);
myButton.setText("btn " + i);
layout.addView(myButton);
}
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setActivated(!v.isActivated());
}
});
根据按钮是否被激活,设置按钮的背景。按下按钮时,翻转激活状态。
如果您有任何疑问,请与我联系!