使用 .xml 文件以编程方式生成相同的布局

generate programmatically same layout with .xml file

我的 xml 文件中有一个填充了一些图像视图的网格布局,我想以编程方式创建网格布局的副本

.xml 文件

<GridLayout
        android:id="@+id/gridLayoutBucket"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:columnCount="3"
        android:padding="24dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="24dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textTimerBucket"
        app:layout_constraintBottom_toTopOf="@id/gridLayoutBucketBucket"
        android:rowCount="2">

        <ImageView
            android:id="@+id/imageView1Bucket"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:contentDescription="@string/imageDesc"
            android:layout_margin="4dp" />

        <ImageView
            android:id="@+id/imageView2Bucket"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:contentDescription="@string/imageDesc"
            android:layout_margin="4dp" />

        <ImageView
            android:id="@+id/imageView3Bucket"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:contentDescription="@string/imageDesc"
            android:layout_margin="4dp" />

        <ImageView
            android:id="@+id/imageView4Bucket"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:contentDescription="@string/imageDesc"
            android:layout_margin="4dp" />

        <ImageView
            android:id="@+id/imageView5Bucket"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:contentDescription="@string/imageDesc"
            android:layout_margin="4dp" />

        <ImageView
            android:id="@+id/imageView6Bucket"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:contentDescription="@string/imageDesc"
            android:layout_margin="4dp" />


    </GridLayout>

我尝试重新创建 gridLayout,它真的很接近,但是第二条车道裁剪了我的图像视图的一些 space 我创建了一个 gridLayout,然后设置了适当的行和列,此外,我创建了一个 rowSpec 和一个 colSpec,然后我用 imageviews 填充我的 gridlayout,给它们一些布局参数,比如 width height,rowSpec 和 ColSpec

        GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayoutBucket);
        gridLayout.removeAllViews();
        gridLayout.setColumnCount(3);
        gridLayout.setRowCount(2);


        int idsetter = 0;

            for(int i=0; i<gridLayout.getRowCount(); i++)
            {
                GridLayout.Spec rowSpec = GridLayout.spec(i, 1,GridLayout.FILL,1);

                for(int j=0;j<gridLayout.getColumnCount();j++)
                {
                    GridLayout.Spec colSpec = GridLayout.spec(j,1,GridLayout.FILL,1);

                    ImageView imageView = new ImageView(this);
                    imageView.setId(idsetter);
                    GridLayout.LayoutParams myGLP = new GridLayout.LayoutParams();
//                    myGLP.rowSpec = rowSpec;
//                    myGLP.columnSpec = colSpec;
                    GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
                    layoutParams.width = 0;
                    layoutParams.height = 0;
                    layoutParams.rowSpec = rowSpec;
                    layoutParams.columnSpec = colSpec;
                    imageView.setLayoutParams(layoutParams);
                    gridLayout.addView(imageView, myGLP );

                }
            }

您的问题在于 XML 格式,尤其是网格上的 GridLayout padding。通过分配 android:layout_width="0dp" android:layout_height="0dp",我假设您在相同的 XML 上有另一个具有这些宽度和高度的视图。通过这样做,你告诉这 2 个视图共享剩下的屏幕。现在可以了,但是通过在 GridLayout 上放置填充,您正在使视图 "Stretch" 向每个方向移动 24dp,从而使另一个视图与 GridLayout 重叠,从而导致您在第二行中描述的裁剪. 尝试删除 GridLayout 上的 padding,我想你会成功的。