使用 .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
,我想你会成功的。
我的 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
,我想你会成功的。