0

我想在 android 中动态创建一个包含一些按钮的布局。但我找不到任何方法来动态创建这个布局。

这是我的布局:

动态布局

我想在按钮完全填充设备宽度后将它们放入下一行。按钮的总数可以变化。有没有办法动态地做到这一点?

更新: 根据您的建议,我正在使用此代码:

private void addQuestionPallete() {
        int tempBtn = 30;
        LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0.1f);
        LayoutParams param2 = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1f);

        linearContent.setWeightSum(1f);
        linearContent.setOrientation(LinearLayout.VERTICAL);
        btnQuestionPalete = new Button[10];

        for (int j = 0; j < tempBtn / 10; j++) {
            linearQuestionPalettesRow = new LinearLayout(mContext);
            linearQuestionPalettesRow.setOrientation(LinearLayout.HORIZONTAL);
            linearQuestionPalettesRow.setLayoutParams(param2);
            for (int i = 0; i < 10; i++) {
                btnQuestionPalete[i] = new Button(mContext);
                btnQuestionPalete[i].setLayoutParams(param);
                btnQuestionPalete[i].setTextColor(Color.BLACK);
                btnQuestionPalete[i].setText("5");
                btnQuestionPalete[i].setId(fChexkBoxID++);
                linearQuestionPalettesRow.addView(btnQuestionPalete[i]);
            }
        }
        linearContent.addView(linearQuestionPalettesRow);
    }

但它只显示单行按钮。我在哪里做错了?

更新 :

好的,我已经解决了我的问题。我在 for 循环中添加了布局。因此布局只添加了一次。

4

3 回答 3

2
  • 在垂直线性布局中添加水平线性布局。
  • 将水平线性布局的“权重总和”设置为 1。
  • 现在在添加按钮之前,将每个按钮的权重设置为 0.1
  • 为添加的按钮数量保留一个计数器,从 1 开始,当它达到 10 时,添加另一个水平线性布局。

您可以根据需要更改按钮的重量,使它们变大或变小,然后调整您的计数器以相应地运行。

例如,如果您决定为每个按钮分配 weight = 0.2,那么您的计数器应该计数到 5 (1/0.2 = 5)。您还可以将权重设置为 0.05 或 0.025 等,具体取决于每行中所需的按钮数量。

这样您就不必担心不同的屏幕尺寸,因为 weight 属性将调整任何屏幕尺寸的视图。

于 2012-08-03T11:19:30.953 回答
1
  1. 创建垂直线性布局
  2. 将水平线性布局添加到垂直线性布局
  3. addView然后使用方法将按钮添加到水平线性布局
  4. 记下按钮的数量,当它达到最大值时,从第 2 步开始重复
于 2012-08-03T10:59:11.080 回答
1

如果您想更好地控制系统如何将您的对象放置在屏幕上,我建议您实现自定义布局。

您应该创建一个扩展 ViewGroup 并覆盖方法的类:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

受保护的无效 onLayout(布尔 arg0,int arg1,int arg2,int arg3,int arg4)

在此方法中,您描述了如何将对象放置在屏幕上。例如,如果您的对象具有所有相同的大小,您可以计算与左侧的距离和与顶部的距离,如下所示:

int left = pinImg.getCol() * dotSize + dotSize ;
int top = pinImg.getRow()  * dotSize + dotSize ;

其中 pinImg 在这种情况下是要放置的对象。

在您的 xml 中描述您的布局

<package.CustomView
     android:id="@+id/pinsTable"
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"    

    />

希望这有帮助。

于 2012-08-03T11:27:43.747 回答