我在程序中以编程方式生成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();
}
};
}
答案 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);
}