1

ボタンが1つだけのプログラムを書いています。最初は、ボタンはデフォルトの色です。ボタンをクリックすると背景色が赤に変わり、もう一度クリックすると背景色がデフォルトの色に変わります。myButton.setOnClickListener(new OnClickListener(){}メソッドでコードを書くことに関する提案はありますか? ありがとう

4

3 に答える 3

1
// Class member variable
private Drawable defaultDrawable;

myButton.setOnClickListener(new OnClickListener()
{
    if(defaultDrawable == null)
    {
        defaultDrawable = myButton.getDrawable();
        myButton.setBackgroundColor(Color.BLUE);
    }
    else
    {
        myButton.setBackgroundDrawable(defaultDrawable);
        defaultDrawable=null;
    }

}

ロジックを確実に改善して、読みやすくすることができます。

また、2 つの状態を持つ ToggleButton を単純に使用することもできます。各状態には、xml ファイルで指定できる独自の背景描画可能/色があります。リスナーは必要ありません。

于 2012-07-04T19:05:45.807 に答える
0

あなたは簡単にこれを行うことができます:

 boolean isSelected = false;
 int color1 = R.color.mycolor1;
 int color2 = R.color.mycolor2;
 myButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if(isSelected){
                  btn.setBackgroundColor( color1 );
            } else {
                btn.setBackgroundColor( color2 );
            }
            isSelected = !isSelected;               
        }
    });

もう1つの解決策は、ボタンクラスを拡張して、isSelectedフラグをメンバークラスとして保存することです。このようにして、この種のボタンを必要な場所で再利用できます。

于 2012-07-04T18:59:48.930 に答える
0

次のように、現在のテーマの R.attr.buttonStyle から色を取得できます。

  public static int getAttrResId( Context context, int attrId ) {
    TypedValue outValue = new TypedValue();
    context.getTheme().resolveAttribute( attrId, outValue, true );
    return outValue.resourceId;
  }
于 2012-07-04T19:08:15.180 に答える