【问题标题】:Creating multiple buttons programmatically: Android以编程方式创建多个按钮:Android
【发布时间】:2017-08-03 08:11:07
【问题描述】:

我知道这已经被问过好几次了,但我无法解决我的问题。我正在尝试以编程方式添加多个按钮。我希望按钮水平对齐。但是,只显示一个按钮。到目前为止,我尝试过的是,

    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 android-relativelayout android-button


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      首先,您创建单个 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() 等。

      您应该考虑将 RelativeLayout 容器替换为垂直 LinearLayout,否则您最终会看到按钮相互重叠(因为您的代码没有定位它们)。

      【讨论】:

      • 这是可行的,但问题是每次调用 locationSort() 时,按钮的数量都会增加。
      • 如果方法是名称“排序”,那么为什么它首先创建任何东西?
      • 方法名重要吗?那是我的错。但我不明白为什么每次按钮的数量都会增加。
      • 名称对坏习惯和代码可读性很重要。并且按钮的数量会增加,因为每次您创建新按钮时。如果您需要即更改现有的,那么您需要完全重新设计逻辑,然后您需要在其他地方创建它们,然后使用findViewById() 查找它们。或删除当前按钮并添加新按钮。
      • 我想要的是一次创建'n'个按钮,其中n的值每次都可以改变。
      猜你喜欢
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多