【问题标题】:Android - In a button On click event, button goes missingAndroid - 在按钮点击事件中,按钮丢失
【发布时间】:2014-09-18 00:59:52
【问题描述】:

我正在尝试更改单击事件按钮的文本颜色。但是,当按钮单击事件被触发时,按钮会丢失。代码如下。

Layout XML 文件中的按钮设计

<Button
         android:id="@+id/btnCategory1"
         android:background="#000000"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:textColor="#FFFFFF"
         android:layout_margin="10dp"        
         >
         </Button>

Activity.java 文件

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_expense);

        btnType1 = (Button)findViewById(R.id.btnCategory1);

        btnType1.setOnClickListener(this);
        }

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

        if(v == (View)btnType1)
        {
            btnType1.setTextColor(R.color.darkorange);      
        }           
    }

也尝试了以下选项。仍然按钮丢失。日志语句触发成功。

btnType1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.v("AAAAAAAAAAA","BBBBBBBBBBB");

                // TODO Auto-generated method stub
                btnType1.setTextColor(R.color.orange); 

            }
        });

如果有人能找到原因,请分享。

【问题讨论】:

    标签: android button android-activity


    【解决方案1】:

    调用 setTextColor 时不能只使用 R.color 整数。您需要调用 getResources().getColor(R.color.YOURCOLOR) 来正确设置颜色。

    让你的按钮如下

    Button bOne = (Button) findViewById(R.id.btnCategory1);
    
            bOne.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    bOne.setTextColor(getResources().getColor(R.color.YOURCOLOR));
    
                }
            });
    

    【讨论】:

      【解决方案2】:

      嗯嗯。我没有看到为什么会发生这种情况的充分理由。

      我确实认为可能有更好/更清洁的方法来做如此简单的事情,所以我会告诉你 - 继续尝试吧。这应该可行。

      摆脱 btnType1.setOnClickListener(this);来自您的 java 的行。

      然后,进入您的 xml 并将其添加到您的按钮:

      android:onClick="methodName"
      

      现在,如果您进入 java 并创建一个名为 methodName 的方法,该方法将视图作为参数:

      public void methodName(View v) {
          btnType1.setTextColor(R.color.darkorgange);
      }
      

      颜色应该更新了!

      编辑:再次查看,之前的代码不起作用的原因是因为您试图更新 btnType2,而不是 btnType1。不过,试试我刚刚给你的方法。这是一种很好的做法,也是一种更清洁、更容易为未来做事的方法。

      编辑2: 好了,谜团解开了。这是你的问题。当您设置颜色时,您需要传入实际颜色,而不仅仅是 id。这是您需要将该行更改为:

      btnType1.setTextColor(getResources().getColor(R.color.darkorange));
      

      【讨论】:

      • 这确实很奇怪。我不知道该告诉你什么。也许尝试将命令更改为 btnType1.setBackgroundColor(R.color.white);或类似的东西。看看会发生什么。
      • OHHH 你的错误是不同的。你没有把正确的东西传给你的班级。请参阅我修改后的答案。
      • 这是一个错字。我只更新 btnType1
      • 添加您在编辑 2 中提到的代码会给我错误。无法编译
      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 2013-06-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2023-04-09
      相关资源
      最近更新 更多