Android - 在按钮上单击事件,按钮丢失

时间:2014-09-18 00:59:52

标签: android button android-activity

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

布局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);      
        }           
    }

也尝试了下面的选项。仍然按钮失踪。 Log语句成功触发。

btnType1.setOnClickListener(new OnClickListener() {

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

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

            }
        });

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

android:onClick="methodName"

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

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

颜色应该更新!

编辑:再看一遍,之前代码无效的原因是因为你试图更新btnType2而不是btnType1。不过,试试我刚刚给你的方法。这是一个很好的实践,是一个更清洁,更简单的方法来做未来的事情。

EDIT2: 好吧,这个谜就解决了。这是你的问题。设置颜色时,需要传递实际颜色,而不仅仅是id。以下是将该行更改为:

所需的内容
btnType1.setTextColor(getResources().getColor(R.color.darkorange));

答案 1 :(得分:2)

调用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));

            }
        });