以编程方式创建多个按钮:Android
Creating multiple buttons programmatically: Android
我知道这个问题已经被问过好几次了,但我无法找到解决我的问题的方法。我正在尝试以编程方式添加多个按钮。我希望按钮水平对齐。但是,只有一个按钮出现。到目前为止我尝试过的是,
private void locationSort() {
RelativeLayout townLayout = (RelativeLayout) locationLayout.findViewById(R.id.town_sort);
for (int i = 0; i <= 3; i++) {
LayoutInflater inflater = getLayoutInflater();
Button btnTag = (Button) inflater.inflate(R.layout.buttons, null,
false);
for (int j = 0; j < 4; j++) {
btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btnTag.setText("Button");
btnTag.setBackgroundResource(R.drawable.alpha_button_selector);
btnTag.setClickable(true);
btnTag.setTextColor(Color.WHITE);
btnTag.setGravity(Gravity.CENTER);
btnTag.setId(j);
}
townLayout.addView(btnTag);
btnTag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "this is test", Toast.LENGTH_SHORT).show();
}
});
}
}
我搜索了相同的内容并浏览了
这样的链接
- Android: programmatically adding buttons to a layout
- android add multiple buttons on fly
还有很多其他按钮,但我不能在这里制作多个按钮。每次只显示一个按钮。
有人可以帮忙吗?
首先,您应该使用 LinearLayout
和 HORIZONTAL
方向,而不是 RelativeLayout
,因为在 Relative
中,您的所有视图都将位于同一个位置(这就是为什么你只能看到一个 Button
)
首先,您创建一个 Button btnTag
,然后您循环并多次更改这个单个按钮(因此没有任何意义,因为所有更改都被覆盖,但最后一个更改被覆盖)。最后,您将该单个按钮添加到视图组。一次。所以这里的一切都正常工作(除了这不是你所期望的)。
您应该将按钮创建和 addView()
作为循环的一部分。
Button btnTag;
for (int j = 0; j < 4; j++) {
btnTag = (Button) inflater.inflate(R.layout.buttons, null,
false);
...
btnTag.setId(j);
townLayout.addView(btnTag);
}
此外,当您为按钮 inflation 使用自己的 XML 文件时,您应该将某些属性移动到该 XML,然后删除所有 setClickable()
、setTextColor()
等
您应该考虑用垂直的 LinearLayout 替换 RelativeLayout
容器,否则最终会出现按钮相互重叠的情况(因为您的代码没有定位它们)。
我知道这个问题已经被问过好几次了,但我无法找到解决我的问题的方法。我正在尝试以编程方式添加多个按钮。我希望按钮水平对齐。但是,只有一个按钮出现。到目前为止我尝试过的是,
private void locationSort() {
RelativeLayout townLayout = (RelativeLayout) locationLayout.findViewById(R.id.town_sort);
for (int i = 0; i <= 3; i++) {
LayoutInflater inflater = getLayoutInflater();
Button btnTag = (Button) inflater.inflate(R.layout.buttons, null,
false);
for (int j = 0; j < 4; j++) {
btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btnTag.setText("Button");
btnTag.setBackgroundResource(R.drawable.alpha_button_selector);
btnTag.setClickable(true);
btnTag.setTextColor(Color.WHITE);
btnTag.setGravity(Gravity.CENTER);
btnTag.setId(j);
}
townLayout.addView(btnTag);
btnTag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "this is test", Toast.LENGTH_SHORT).show();
}
});
}
}
我搜索了相同的内容并浏览了
这样的链接- Android: programmatically adding buttons to a layout
- android add multiple buttons on fly
还有很多其他按钮,但我不能在这里制作多个按钮。每次只显示一个按钮。 有人可以帮忙吗?
首先,您应该使用 LinearLayout
和 HORIZONTAL
方向,而不是 RelativeLayout
,因为在 Relative
中,您的所有视图都将位于同一个位置(这就是为什么你只能看到一个 Button
)
首先,您创建一个 Button btnTag
,然后您循环并多次更改这个单个按钮(因此没有任何意义,因为所有更改都被覆盖,但最后一个更改被覆盖)。最后,您将该单个按钮添加到视图组。一次。所以这里的一切都正常工作(除了这不是你所期望的)。
您应该将按钮创建和 addView()
作为循环的一部分。
Button btnTag;
for (int j = 0; j < 4; j++) {
btnTag = (Button) inflater.inflate(R.layout.buttons, null,
false);
...
btnTag.setId(j);
townLayout.addView(btnTag);
}
此外,当您为按钮 inflation 使用自己的 XML 文件时,您应该将某些属性移动到该 XML,然后删除所有 setClickable()
、setTextColor()
等
您应该考虑用垂直的 LinearLayout 替换 RelativeLayout
容器,否则最终会出现按钮相互重叠的情况(因为您的代码没有定位它们)。