【问题标题】:How can a button change textView color more than once?一个按钮如何多次更改 textView 颜色?
【发布时间】:2013-05-21 09:40:59
【问题描述】:

我正在尝试使按钮将 textView 的颜色更改为白色,但第二次按下将其更改为蓝色,第三次按下将更改为红色,依此类推。当我尝试它时,它显然只选择了最后一个(RED)并且不会再改变。有人知道我该怎么做吗?真的卡住了。代码如下:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setContentView(R.layout.activity_main);
    dc1 = (TextView)findViewById(R.id.digitalClock1);
    bt1 = (Button)findViewById(R.id.button1);

    Handler handler = new RandomMoveHandler((TextView) findViewById(R.id.digitalClock1));
    handler.sendEmptyMessage(0);

    bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            dc1.setTextColor(Color.WHITE);
            dc1.setTextColor(Color.BLUE);
            dc1.setTextColor(Color.RED);
        }
    });

}

【问题讨论】:

  • 你把它设置在一个块中,它只会变成红色
  • 那么如何为按钮创建一个数组呢?
  • 只需为此使用 case/switch 语句。
  • @JasonMills:下面的答案都是正确的,

标签: java android colors textview


【解决方案1】:
private int count = 0;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);
dc1 = (TextView)findViewById(R.id.digitalClock1);
bt1 = (Button)findViewById(R.id.button1);

Handler handler = new RandomMoveHandler((TextView) findViewById(R.id.digitalClock1));
handler.sendEmptyMessage(0);

  bt1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(count)
        {
         case 0: dc1.setTextColor(Color.WHITE); count++; break;
         case 1: dc1.setTextColor(Color.BLUE); count++; break;
         case 2: dc1.setTextColor(Color.RED); count = 0; break;
        }
    }
});

【讨论】:

  • 不能引用在不同方法中定义的内部类中的非最终变量计数
  • 如果你让 count final 它的值不能改变
  • 整数标签 = (v.getTag() == null) ? 0 : (整数)v.getTag();诠释颜色=颜色[标签]; dc1.setTextColor(颜色); v.setTag((tag+1)%7); }
【解决方案2】:
int[] colors = {Color.WHITE, Color.BLUE, Color.RED };

  bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Integer tag = (v.getTag() == null) ? 0 : (Integer)v.getTag();
            int color = colors[tag];
            dc1.setTextColor(color);
            v.setTag((tag+1)%colors.length);
        }
    });

我现在不能尝试。检查错字

【讨论】:

  • 完美运行!你能告诉我如果我想添加更多颜色,我只是将它们与其他颜色一起添加到顶部还是我必须更改其他任何东西?
  • 代替 v.setTag((tag+1)%3);放 v.setTag((tag+1)%colors.length);然后将其他颜色添加到数组中
  • 你能告诉我,只有白色、红色、蓝色、绿色、青色和洋红色我可以使用吗?我可以不指定十六进制值吗?
  • 使用 Color.parseColor("#YOURHEX") 并将返回值(一个 int)存储在数组中
【解决方案3】:

试试这个:

 int [] colors = new int[]{Color.WHITE, Color.BLUE, Color.RED};
    int index = 0;
    bt1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dc1.setTextColor(colors[index]);
                index++;
                if(index == colors.length)
                  index = 0;
            }
        });

【讨论】:

    【解决方案4】:

    你需要统计点击次数,试试这个:

    private int flag = 0;
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            setContentView(R.layout.activity_main2);
            dc1 = (TextView) findViewById(R.id.digitalClock1);
            bt1 = (Button) findViewById(R.id.button1);
    
            bt1.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                    // TODO Auto-generated method stub
                    if (flag == 0)
                        dc1.setTextColor(Color.WHITE);
                    else if (flag == 1)
                        dc1.setTextColor(Color.BLUE);
                    else if (flag == 2)
                        dc1.setTextColor(Color.RED);
    
                    if (flag++ >= 2)
                        flag = 0;
                }
            });
    

    【讨论】:

      【解决方案5】:

      嗯,看起来像一个初学者的问题。 你现在所做的是,当你点击按钮时,onClick() 方法被调用,然后颜色被设置为白色,然后是蓝色,然后是红色。 你想做的是更像其他答案的事情

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-14
        • 2016-11-07
        • 1970-01-01
        • 2015-02-23
        • 1970-01-01
        • 2012-12-06
        • 2021-05-21
        • 2018-09-15
        相关资源
        最近更新 更多