我正在尝试更改点击事件上按钮的文字颜色。但是当触发按钮单击事件时,按钮会丢失。代码如下所述。
布局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);
}
});
如果有人能找到原因,请分享。
答案 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));
}
});