在for循环中,我在屏幕上放置按钮并将其ID设置为
LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags);
layout.setOrientation(LinearLayout.VERTICAL);
Button btn = null;
for (int i = 0; i < buttons_in_row; i++) {
LinearLayout row = new LinearLayout(this);
row.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
for (int j = 0; j < buttons_in_row; j++) {
btn = new Button(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
params.setMargins(5, 5, 5, 5);
btn.setLayoutParams(params);
btn.setText("B " + (j + 1 + (i * buttons_in_row)));
btn.setId(j + 1 + (i * buttons_in_row));
btn.setWidth(width / buttons_in_row);
btn.setHeight(width / buttons_in_row);
btn.setBackgroundResource(R.drawable.button);
GradientDrawable drawable = (GradientDrawable) btn.getBackground();
drawable.setColor(Color.parseColor("#" + colors[random_color][0]));
btn.setOnClickListener(this);
//Log.i("btn.getsize", btn.getWidth() + ", " + btn.getHeight());
row.addView(btn);
}
layout.addView(row);
}
Button b = (Button) layout.findViewById(2);
在循环结束时,我想选择其中一个按钮(例如No.2)并给它一个不同的背景颜色。
我试过这些
Button b = (Button) findViewById(2);
btn.getId(2);
我该怎么做?
答案 0 :(得分:0)
您必须将这些按钮添加到视图(RelativeLayout或LinearLayout等);您可以通过该布局访问按钮。
例如你必须做这样的事情:
LinearLayout myLayout = (LinearLayout) findViewById(R.id.linear_layout_tags);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
Button btnTag = new Button(this);
btnTag.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
btnTag.setText("Button " + (j + 1 + (i * 4)));
btnTag.setId(j + 1 + (i * 4));
myLayout.addView(btnTag);
}
}
这里,考虑到这个例子,你可以通过它的id找到按钮:
Button b = (Button) myLayout.findViewById(WHAT_EVER_ID_I_SET_IN_LOOP);
<强>更新强>
在Android Studio中,点击灯泡上的这个&#39;错误&#39;。并选择在第一个子菜单中禁用检查。
最有可能的是,以这种方式创建的ID不会产生问题,但还有其他方法可以创建ID,请参阅以下链接。
答案 1 :(得分:0)
您可以创建自己的按钮对象;
public class MyButton {
private int id;
private Button button;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Button getButton() {
return button;
}
public void setButton(Button button) {
this.button = button;
}
}
然后,您可以创建一个Arraylist并像在循环中一样设置它们。创建另一个循环来查找;
public static Button findMyButton(int id) {
for (MyButton myButton: myButtonList) {
if (myButton.getId() == id)
return myButton
}
return null;
}
当您手动设置按钮ID时,它可能与&#34;自动生成的来自android&#34;的任何视图的id重复。
答案 2 :(得分:0)
您可以通过两种方式识别您的观点。
如果您想以编程方式将Id设置为您的视图..您需要像这样设置..
masterLayout.setId(R.id.masterLayout);
R.id.masterLayout 来自 ids.xml ,位于 values文件夹
内<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="masterLayout" type="id">masterLayout</item>
</resources>
其他方法是识别视图&#34; byTag&#34; 。
Button button = new Button(this);
button.setText("Button "+i);
button.setTag(i);
button.setOnClickListener(this);
masterLayout.addView(button);
获取此视图..
@Override
public void onClick(View view) {
switch((Integer)view.getTag()){
case 0:
Toast.makeText(this, "Clicked Button 0", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "Clicked Button 1", Toast.LENGTH_SHORT).show();
break;
}
}
在所有这些之前..你需要将你的视图添加到布局。
这里解释了完整的实施..
public class DynamicViewActivity extends Activity implements View.OnClickListener{
private LinearLayout mLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dynamic_views);
mLayout = (LinearLayout) findViewById(R.id.mLayout);
createDynamicViews();
}
private void createDynamicViews() {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT
, LinearLayout.LayoutParams.MATCH_PARENT);
ScrollView scrollView = new ScrollView(this);
scrollView.setLayoutParams(layoutParams);
LinearLayout masterLayout = new LinearLayout(this);
masterLayout.setId(R.id.masterLayout);
masterLayout.setLayoutParams(layoutParams);
masterLayout.setOrientation(LinearLayout.VERTICAL);
scrollView.addView(masterLayout);
for(int i = 0; i < 2; i++){
Button button = new Button(this);
button.setText("Button "+i);
button.setTag(i);
button.setOnClickListener(this);
masterLayout.addView(button);
}
mLayout.addView(scrollView);
}
@Override
public void onClick(View view) {
switch((Integer)view.getTag()){
case 0:
Toast.makeText(this, "Clicked Button 0", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "Clicked Button 1", Toast.LENGTH_SHORT).show();
break;
}
}
}