以编程方式创建多个按钮:Android

3

我知道这个问题之前已经被问过很多次,但是我无法解决我的问题。我正在尝试通过编程方式添加多个按钮。我希望这些按钮水平对齐。然而,只有一个按钮显示出来。到目前为止,我尝试过的方法是:

    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();
            }
        });
    }
}

我已经搜索了相关内容,并查看了以下链接:

但是,我无法创建多个按钮,只显示一个按钮。 请问有人可以帮忙吗?

2个回答

3

首先,您应该使用具有HORIZONTAL方向的LinearLayout,而不是RelativeLayout,因为在Relative中,所有视图都将位于同一位置(这就是为什么您只能看到一个Button)。


1
首先,您创建单个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);
    }

此外,由于您使用自己的XML文件进行按钮展开,因此您应将某些属性移动到该XML中,然后删除所有setClickable()setTextColor()等内容。
您应该考虑使用垂直LinearLayout替换RelativeLayout容器,否则您将最终导致按钮彼此重叠(因为您的代码没有对它们进行定位)。

这个程序可以工作,但问题是每次调用locationSort()函数时,按钮的数量都会增加。 - manini
1
如果方法被命名为“sort”,那么为什么它首先会创建任何东西? - Marcin Orlowski
方法名称重要吗?那是我的错。但我不明白为什么按钮数量每次都会增加。 - manini
1
在编写代码时,命名对于不良习惯和代码可读性至关重要。每次创建新按钮都会增加按钮数量。如果需要更改现有按钮,则需要完全重新设计逻辑,然后在其他地方创建它们并使用 findViewById() 查找它们,或者删除当前按钮并添加新按钮。 - Marcin Orlowski
我想要做的是一次性创建“n”个按钮,其中n的值每次都可以更改。 - manini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接