Android:如何动态创建此布局?

时间:2012-08-03 10:53:55

标签: android android-layout

我想在android中动态创建一个布局,其中包含一些按钮。但我无法找到动态创建此布局的任何方法。

这是我的布局:

Dynamic Layout

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

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

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循环添加布局。因此布局只增加了一次。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

  1. 创建垂直线性布局
  2. 将水平线性布局添加到垂直线性布局
  3. 然后使用addView方法
  4. 将按钮添加到水平线性布局
  5. 保持按钮的计数以及从第2步到达最大重复次数

答案 2 :(得分:1)

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

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

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

protected void onLayout(boolean 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"    

    />

希望得到这个帮助。