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

Android:如何动态创建此布局?,android,android-layout,Android,Android Layout,我想在android中动态创建一个包含一些按钮的布局。但我无法找到任何方法来动态创建此布局 以下是我的布局: 我想在按钮完全填充设备宽度后,将其放入下一行。按钮的总数可以改变。 有什么方法可以动态地做到这一点吗 更新: 根据您的建议,我正在使用以下代码: private void addQuestionPallete() { int tempBtn = 30; LayoutParams param = new LinearLayout.LayoutParams(

我想在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);
    }
private void addQuestionPallete(){
int tempBtn=30;
LayoutParams param=新的LinearLayout.LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级,0.1f);
LayoutParams param2=新的LinearLayout.LayoutParams(LayoutParams.FILL\u父级,LayoutParams.FILL\u父级,1f);
线性内容。设置权重总和(1f);
linearContent.setOrientation(LinearLayout.VERTICAL);
btnQuestionPalete=新建按钮[10];
对于(int j=0;j
但它只显示一行按钮。我哪里做错了

更新:

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

  • 创建垂直线性布局
  • 将水平线性布局添加到垂直线性布局
  • 然后使用
    addView
    方法将按钮添加到水平线性布局中
  • 对按钮进行计数,当达到最大值时,重复步骤2
  • 创建垂直线性布局
  • 将水平线性布局添加到垂直线性布局
  • 然后使用
    addView
    方法将按钮添加到水平线性布局中
  • 对按钮进行计数,当达到最大值时,重复步骤2
    • 在垂直线性布局中添加水平线性布局
    • 将水平线性布局的“权重和”设置为1
    • 现在,在添加按钮之前,请将每个按钮的权重设置为0.1
    • 为从1开始添加的按钮数量保留一个计数器,当它达到10时,添加另一个水平线性布局
    您可以根据需要更改按钮的重量,使其变大或变小,然后调整计数器使其相应工作

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

    这样,您就不必担心不同的屏幕大小,因为“权重”属性将调整任何屏幕大小的视图。

    • 在垂直线性布局中添加水平线性布局
    • 将水平线性布局的“权重和”设置为1
    • 现在,在添加按钮之前,请将每个按钮的权重设置为0.1
    • 为从1开始添加的按钮数量保留一个计数器,当它达到10时,添加另一个水平线性布局
    您可以根据需要更改按钮的重量,使其变大或变小,然后调整计数器使其相应工作

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


    通过这种方式,您不必担心不同的屏幕大小,因为“权重”属性将调整任何屏幕大小的视图。

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

    您应该创建一个扩展ViewGroup的类并重写以下方法:

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    

    仅限受保护的void布局(布尔值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"    
    
        />
    
    
    

    希望有帮助。

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

    您应该创建一个扩展ViewGroup的类并重写以下方法:

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    

    仅限受保护的void布局(布尔值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"    
    
        />
    
    
    

    希望这有帮助。

    是的,你试过什么?否则,点击按钮并添加水平线性布局。我尝试添加水平线性布局,但在达到屏幕最大宽度后如何将它们放入下一行?是的,您尝试了什么?否则,点击按钮并添加水平线性布局。我尝试添加水平线性布局,但如何在它们达到最大值后将它们放入下一行