Android onClick不会更改按钮的文本颜色

时间:2012-04-20 18:55:51

标签: android xml button onclick onclicklistener

我正在尝试更改按钮上文字的颜色。这是我的代码

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.graphics.Color;

public class ColorPatternGameActivity extends Activity implements OnClickListener {
protected Button button1; 
protected Button button2;
protected Button button3;
protected Button button4;
protected TextView test;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button1 = (Button)findViewById(R.id.b1);
    Button button2 = (Button)findViewById(R.id.b2);
    Button button3 = (Button)findViewById(R.id.b3);
    Button button4 = (Button)findViewById(R.id.b4);
    TextView test = (TextView)findViewById(R.id.test);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
    button3.setOnClickListener(this);
    button4.setOnClickListener(this);

    test.setText("testing");

}

@Override
public void onClick(View v) {
    if (v == button1) {
        test.setText("Red");
        button1.setTextColor(Color.RED);
        }
    else if (v == button2) {
        button2.setTextColor(Color.GREEN);
        test.setText("Green");
    }
    else if (v == button3) {
        button3.setTextColor(Color.BLUE);
        test.setText("Blue");
    }
    else if (v == button4) {
        button4.setTextColor(Color.YELLOW);
        test.setText("Yellow");
    }
}   
}

单击按钮不会更改文本或颜色。我之前已经实现了onClick并且它运行良好,让我更加困惑的是为什么它不起作用。

如果它有助于我声明按钮的xml示例:

<Button
 android:id="@+id/b1"
 android:layout_width="fill_parent"
 android:layout_height="match_parent"
 android:layout_weight="1"
 android:text="1"/>

4 个答案:

答案 0 :(得分:4)

您正在使用findViewById的结果分配局部变量。由于您使用成员变量在onClick方法中测试引用相等性,因此始终为false。

改变(以及其他人):

Button button1 = (Button)findViewById(R.id.b1);

要:

button1 = (Button)findViewById(R.id.b1);

尽管如果你对每个按钮只有不同的点击方法,它可能会更清晰。

答案 1 :(得分:1)

如果您是以编程方式创建按钮,则此解决方案将起作用。

只使用铸造对象((Button)v).setTextColor(Color.GRAY);如下:

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Toast toast;
    Log.w("ANDROID DYNAMIC VIEWS:", "View Id: " + v.getId());
    switch (v.getId()) {
    case MY_BUTTON:
        toast = Toast.makeText(this, "Clicked on " + v.getTag().toString(), Toast.LENGTH_LONG);
        toast.setGravity(Gravity.TOP, 25, 400);
        toast.show();

        ((Button) v).setTextColor(Color.GRAY);

        v.setBackgroundColor(Color.WHITE);


        break;
        // More buttons go here (if any) ...

    }
}

答案 2 :(得分:0)

您初始化类变量,如

protected Button button1; 
protected Button button2;
protected Button button3;
protected Button button4;

然后在onCreate方法中,您将再次初始化按钮

Button button1 = (Button)findViewById(R.id.b1);
Button button2 = (Button)findViewById(R.id.b2);
Button button3 = (Button)findViewById(R.id.b3);
Button button4 = (Button)findViewById(R.id.b4);

这使得按钮本地化为onCreate方法,这不应该这样做,在你的情况下,类变量没有被分配任何事情,所以你的代码不起作用......

我怀疑如果你在onCreate里面设置了onClickListener,就不会发生这种情况,因为你的方法本地会改变文本颜色......

因此,不要在onCreate中使用Button button1 = (Button)findViewById(R.id.b1);,而是使用button1 = (Button)findViewById(R.id.b1);

如果您使用的是Eclipse IDE,那么button1将为蓝色,表示它是一个类变量......

答案 3 :(得分:0)

您可以看到此示例

 <Button android:id="@+id/testing"
         android:text="Testing"
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"
         android:textColor="#000000">

此处按钮文字颜色可以是黑色现在我将其更改为按钮上的白色单击

 @Override
  public void onClick(View v) {
      if (v == testing) {
        testing.setTextColor(Color.WHITE);
         }
     }