我正在尝试更改按钮上文字的颜色。这是我的代码
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"/>
答案 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);
}
}