0

我已经根据单击该按钮制作了一个非常简单的按钮颜色更改程序。我尝试了下面的代码,但它不起作用。请帮助我,我的代码如下:

main.java

package com.example.buttonclickdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
Button b;
int cnt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

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

            }
        });
        if(cnt<5)
        {
            b.setBackgroundColor(16711681);
        }
        else if (cnt>5 && cnt<10) {
            b.setBackgroundColor(16711936);
        }
        else{
            b.setBackgroundColor(65536);
        }
    }



}
4

5 回答 5

2

在您的代码中,按钮颜色更改(if 条件)位于 on create 方法内,因此仅在加载活动时才会调用它,而不是将其更改为 inside on click 方法,以便在每次单击时检查它

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            cnt++;
  if(cnt<5)
        {
            b.setBackgroundColor(16711681);
        }
        else if (cnt>5 && cnt<10) {
            b.setBackgroundColor(16711936);
        }
        else{
            b.setBackgroundColor(65536);
        }

            }
        });

    }
于 2013-06-28T10:42:19.367 回答
1

您需要将逻辑放入onClick()方法中。目前它只是 in onCreate(),它只被调用一次。

b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            cnt++;
            if(cnt<5) {
                b.setBackgroundColor(16711681);
            }
            else if (cnt>5 && cnt<10) {
                b.setBackgroundColor(16711936);
            }
            else {
                b.setBackgroundColor(65536);
            }
        }
    });
于 2013-06-28T10:42:25.823 回答
1
b.setOnClickListener(new OnClickListener() {

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

        if(cnt<5)
    {
        b.setBackgroundColor(16711681);
    }
    else if (cnt>5 && cnt<10) {
        b.setBackgroundColor(16711936);
    }
    else{
        b.setBackgroundColor(65536);
    }
        }
    });

您需要在OnClickListener. 因为onCreate只会在Activity创建时调用一次,因此它只会执行一次。

于 2013-06-28T10:42:26.163 回答
1

移动这个

 if(cnt<5)
        {
            b.setBackgroundColor(16711681);
        }
        else if (cnt>5 && cnt<10) {
            b.setBackgroundColor(16711936);
        }
        else{
            b.setBackgroundColor(65536);
        }

onClick听众。onClick 回调仅在事件发生并且您编写的其余代码已被调用后调用,因此颜色不会改变。

更好的是定义自定义 xml

于 2013-06-28T10:44:20.507 回答
1

我已经通过以下代码解决了这个问题:

        b.setOnClickListener(new OnClickListener() {

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

            if(cnt<5)
        {
            b.setBackgroundColor(Color.parseColor("#d4cae2"));
        }
        else if (cnt>5 && cnt<10) {
            b.setBackgroundColor(Color.parseColor("#00cbcc"));
        }
        else{
            b.setBackgroundColor(Color.parseColor("#d1bff0"));
        }
            }
        });
}
}
于 2013-06-28T10:55:26.623 回答