0

ボタンのテキストの色を変更しようとしています。これが私のコードです

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

4 に答える 4

4

の結果でローカル変数を割り当てていますfindViewById。メンバー変数を使用してメソッドの参照の等価性をテストしているためonClick、常に false になります。

変更(および他のものも):

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

に:

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

ただし、ボタンごとに異なるクリック方法を使用するだけで、おそらくよりクリーンになります。

于 2012-04-20T18:58:57.717 に答える
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) ...

    }
}
于 2012-08-02T09:00:31.863 に答える
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 メソッドに対してローカルにしますが、これは行うべきではありません。あなたの場合、クラス変数には何も割り当てられていないため、コードは機能しません...

テキストの色が変更されたメソッドに対してローカルであるため、onClickListenerをonCreate自体の内部に設定した場合、これは起こらないと思います...

Button button1 = (Button)findViewById(R.id.b1);したがって、onCreateで使用する代わりにbutton1 = (Button)findViewById(R.id.b1);

Eclipse IDE を使用している場合、button1 はクラス変数であることを示す青色になります...

于 2012-04-20T19:14:11.010 に答える
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);
         }
     }
于 2012-05-04T06:48:57.157 に答える