第一次单击时更改按钮颜色,第二次单击则恢复为默认值

时间:2018-04-11 17:18:57

标签: android android-layout

我想通过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;
            }

        }
    });

现在它只将最后一个按钮颜色更改为绿色(但在第二次点击时不会恢复为灰色)。其他按钮不起作用。

请帮我解决这个问题。

3 个答案:

答案 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());

    }
});

根据按钮是否被激活,设置按钮的背景。按下按钮时,翻转激活状态。

如果您有任何疑问,请与我联系!