首页 文章

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

提问于
浏览
2

我知道之前曾多次询问过这个问题,但是我无法解决我的问题 . 我试图以编程方式添加多个按钮 . 我希望按钮水平对齐 . 但是,只显示一个按钮 . 到目前为止我尝试过的是,

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 回答

  • 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() 等 .

    您应该考虑使用垂直LinearLayout替换 RelativeLayout 容器,否则最终会出现彼此重叠的按钮(因为您的代码没有定位它们) .

相关问题