我有一个像这样的GridLayout
<android.support.v7.widget.GridLayout
android:id="@+id/itemContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:columnCount="3"
>
</android.support.v7.widget.GridLayout>
在运行时,我使用包含ImageViews的项目填充此布局。 项目看起来像这样:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/__item_background"
android:padding="15dp"
android:layout_margin="2dp">
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:scaleType="fitCenter"
app:layout_constraintBottom_toTopOf="@+id/itemText"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/placeholder"/>
<TextView
android:id="@+id/itemText"
android:layout_height="30sp"
android:layout_width="match_parent"
app:layout_constrainedWidth="true"
app:autoSizeTextType="uniform"
android:gravity="center"
android:layout_gravity="fill"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/image_view"
/>
</android.support.constraint.ConstraintLayout>
这是Java代码
View itemLayout = View.inflate(this, R.layout.task_item, null);
itemLayout.setLayoutParams( new GridLayout.LayoutParams(GridLayout.spec(GridLayout.UNDEFINED, 1f), GridLayout.spec(GridLayout.UNDEFINED, 1f)));
ImageView imageView = itemLayout.findViewById(R.id.image_view);
int img = getResources().getIdentifier(dynamicImage, "drawable", getPackageName());
if (img != 0)
imageView.setImageResource(img);
itemContainer.addView(itemLayout); //Gridlayout @+id/itemContainer
我希望三列研磨布局的宽度相等,但是图像尺寸过大并且超出了视口。
当我提供固定的宽度/高度
时//itemLayout.setLayoutParams( new GridLayout.LayoutParams(GridLayout.spec(GridLayout.UNDEFINED, 1f), GridLayout.spec(GridLayout.UNDEFINED, 1f)));
itemLayout.setLayoutParams(new ConstraintLayout.LayoutParams(320, 450));
一切正常。
如果imageResource是我的可绘制占位符矢量可绘制的,而不是我的常规.png图像,它也可以工作。这是一个有效的屏幕截图:
这是一个混乱的屏幕:
显然,问题一定与缩放光栅图像有关。
相关属性似乎是
android:scaleType="fitCenter"
和app:layout_constraintDimensionRatio="1:1"
,但我不知道如何正确更改它们。