如何在android中为具有特定id的按钮设置背景?

时间:2014-07-31 09:52:05

标签: android button background

我在程序中以编程方式生成Buttons。 我想要做的是如下。

我正在生成4个按钮,每个按钮都有id 0,1,2和3。

在点击ID为1的按钮时,我想将id = 1的按钮的背景更改为红色,其余按钮将具有默认的灰色。

当我点击id = 2的按钮时,我希望id = 2的按钮变为红色背景,id = 1的按钮变为默认的灰色。

我只希望当前点击的按钮为红色,即一次只有一个按钮保持红色。我尝试执行以下操作,但之前单击的按钮也保持红色。谁能告诉我一步一步做什么?

代码:

    for(int i=0;i<4;i++)
           {

          final Button tv1 = new Button(this);
            tv1.setId(i);
            tv1.setText(value);
            tv1.setTextSize(25);
            tv1.setOnClickListener(getOnClickDoSomething(tv1));
            }

    private OnClickListener getOnClickDoSomething(final Button tv1) {
    // TODO Auto-generated method stub

    return new View.OnClickListener() {
        public void onClick(View v) {


      Log.i("dynamiclly generated button click id",""+btn_id);
            String text = tv1.getText().toString();

            Log.e("text message", "" + text);
            tv1.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.red));
            Toast.makeText(MenuItemsActivity.this,
                    "clicked" + v.getId() + "," + tv1.getId(), 1000).show();
            display_category(text);
            //btn_id=tv1.getId();
        }
    };

}

4 个答案:

答案 0 :(得分:0)

如何使用开关盒:

switch(btn_id){

case 1:
     tv.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.red));
     break;

case 2:
     tv.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.blue));
     break;
.
.
.

case n:
     tv.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.green));
     break;

default:
     tv.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.grey));
     break;
}

答案 1 :(得分:0)

您可以使用以下代码更改按钮颜色

 return new View.OnClickListener() {
        public void onClick(View v) {

            for(int i=buttonStartID;i<buttonMaxID;i++){
                Button btn = (Button) findViewById(i);
                btn.setBackgroundDrawable(getResources().getDrawable(
                                R.drawable.grey));
            }

            Log.i("dynamiclly generated button click id", "" + btn_id);
            String text = tv1.getText().toString();

            Log.e("text message", "" + text);
            tv1.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.red));
            Toast.makeText(MenuItemsActivity.this,
                    "clicked" + v.getId() + "," + tv1.getId(), 1000).show();
            display_category(text);
            // btn_id=tv1.getId();
        }
    };

答案 2 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

<强> main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lnrButton"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:gravity="center"
    android:orientation="vertical">
</LinearLayout>

<强> MainActivity.java

public class MainActivity extends Activity {

    private LinearLayout lnrButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lnrButton = (LinearLayout) findViewById(R.id.lnrButton);
        for (int i = 0; i < 4; i++) {

            Button button = new Button(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.topMargin = 10;
            button.setLayoutParams(params);
            button.setId(i);
            button.setText("Button" + (i + 1));
            button.setTextSize(25);
            button.setTag(i);
            button.setBackgroundColor(Color.BLUE);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    for (int i=0;i<lnrButton.getChildCount();i++){
                        if(i==(Integer)v.getTag()){
                            ((Button)lnrButton.getChildAt(i)).setBackgroundColor(Color.RED);
                        }else{
                            ((Button)lnrButton.getChildAt(i)).setBackgroundColor(Color.BLUE);
                        }
                    }
                }
            });
            lnrButton.addView(button);
        }
    }
}

答案 3 :(得分:0)

试试这个

Button tv1 = new Button(this);
tv1.setId(i);
tv1.setText(value);
tv1.setTextSize(25);
tv1.setOnClickListener(myClickListener);
}
Button tv2 = new Button(this);
tv2.setId(i);
tv2.setText(value);
tv2.setTextSize(25);
tv2.setOnClickListener(myClickListener);
}
Button tv3 = new Button(this);
tv3.setId(i);
tv3.setText(value);
tv3.setTextSize(25);
tv3.setOnClickListener(myClickListener);
}
Button tv4 = new Button(this);
tv4.setId(i);
tv4.setText(value);
tv4.setTextSize(25);
tv4.setOnClickListener(myClickListener);
}

private OnClickListener myClickListener = new OnClickListener(){
        public void onClick(View v){
resetBG():
(Button) findViewById(v.getID())setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.red));
}
private void reset(){
  tv1.setBackgroundDrawable(SET_DEFAULT_DRAWABLE);
  tv2.setBackgroundDrawable(SET_DEFAULT_DRAWABLE);
  tv3.setBackgroundDrawable(SET_DEFAULT_DRAWABLE);
  tv4.setBackgroundDrawable(SET_DEFAULT_DRAWABLE);
}