【问题标题】:Button won't change background on click按钮不会在点击时改变背景
【发布时间】:2015-01-03 08:14:45
【问题描述】:

我有三个Buttons。我希望按钮在单击时更改颜色,然后如果再次单击该按钮,它会恢复为默认颜色。

问题:如果我点击第一个,它会改变颜色。但是,如果我单击第二个,它不会改变颜色。但是,如果我再点击第二次Button,它最终会改变颜色。有谁知道为什么第二个Button 在第一次点击时不会改变颜色?

注意:调试后我注意到点击第一个Buttonis_clicked 设置为1。所以当我点击第二个Button 时,它认为它已经改变了颜色并将其设置回默认值。有谁知道我如何正确设置is_clicked 标志?或者还有什么我应该做的吗?

 int is_clicked = 0;


 public void ButtonOnClick(View v) {

            switch (v.getId()) {
              case R.id.button1:
                  if (is_clicked == 1){
                      button_list.get(0).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));;
                      is_clicked--;
                      break;
                  }
                  if (is_clicked == 0){
                      button_list.get(0).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00));
                      is_clicked++;
                      break;
                  }
                      break;
              case R.id.button2:
                  if (is_clicked == 1){
                      button_list.get(1).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));;
                      is_clicked--;
                      break;
                  }
                  if (is_clicked == 0){
                      button_list.get(1).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00));
                      is_clicked++;
                      break;
                  }
                      break;
              case R.id.button3:
                  if (is_clicked == 1){
                      button_list.get(2).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));;
                      is_clicked--;
                      break;
                  }
                  if (is_clicked == 0){
                      button_list.get(2).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00));
                      is_clicked++;
                      break;
                  }
                      break;
               }
           }

【问题讨论】:

  • 然后有三个 int is_clicked Like btn1_clicked,btn2_clicked,btn3_clicked
  • 嗯,好提议。但是在我的程序中,我实际上有 50 个按钮。所以我希望我可以在所有情况下使用一个 is_clicked。为了这个例子和简单性,我只是将它缩短为三个按钮......
  • 这样设置颜色是一种不好的做法,为什么你不使用Selector,你可以通过2或3行代码来实现这一点
  • 我以前从未使用过 Selector。如果只有几行代码,你能告诉我吗?
  • @user2456977 当然,我添加了一些代码

标签: android button colors onclick


【解决方案1】:

虽然我同意 Pedram.... 根据您的要求,您可以在 xml 中使用标签。

把这个标签放在每个按钮里

     android:tag="0"

万一

  String clicked= (String)btn1.getTag();
  If ("0".equals(clicked)) {
     //set a color for your button
      button1.setTag("1");
   } else {
    //set a color for your button
      button1.setTag("0");
    }

【讨论】:

    【解决方案2】:

    它只是一个简单的按钮

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@drawable/normal" android:state_enabled="true" android:state_focused="true"/>
        <item android:drawable="@drawable/pressed" android:state_enabled="true" android:state_pressed="true"/>
        <item android:drawable="@android:color/white"/>
    
    </selector>
    

    将此设置为按钮的背景

    编辑:最后一个是默认的,还有更多的状态,比如选择和禁用,试着玩一下,你可以用选择器做很多功能。

    这是一个不错的按钮。具有中风和禁用状态。

    <?xml version="1.0" encoding="utf-8" ?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_pressed="true" >
        <shape>
          <solid
              android:color="#00aeef" />
          <stroke
              android:width="1dp"
              android:color="#0090bf" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
    <!--     #ef4444  #992f2f -->
    </item>
      <item android:state_enabled="false">
          <shape>
          <solid
              android:color="#174574"/>
          <stroke
              android:width="1dp"
              android:color="#12375D" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
      </item>
    <!--   Default -->
      <item>
        <shape>
          <gradient
              android:startColor="#3399FF"
              android:endColor="#2E8AE6"
              android:angle="270" />
          <stroke
              android:width="1dp"
              android:color="#297CCF" />
          <corners
              android:radius="6dp" />
          <padding
              android:left="10dp"
              android:top="10dp"
              android:right="10dp"
              android:bottom="10dp" />
        </shape>
      </item>
    </selector>
    

    【讨论】:

    • 对不起,我对此有点陌生。我应该在哪个文件夹/文件中添加它?我是否在drawable中创建一个新的xml文件?还是我在创建按钮的layour xml中添加它?
    • @user2456977 把它放在你的 drawable 文件夹中,如果你还没有它已经创建一个新的,并且去掉所有的 switch case 代码,它只是通过 XML 工作。
    • 我不得不选择 Indra 的答案,因为 Indra 使用我当前的代码回答了它。但是,我可能会按照您建议的方式更改我的代码。但我至少给了你一个赞成票 :) 非常感谢!
    • hm,在这段代码中,只有当我按下它时它才会改变颜色。一旦我放手,它就会恢复默认值。我想在我放手时也改变颜色......有什么想法吗?
    • 正如我所说,选择器中有更多的状态,使用适合您需求的状态,前往文档:developer.android.com/guide/topics/resources/…
    猜你喜欢
    • 2015-02-10
    • 2021-08-20
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多