我有ConstraintLayout,里面有4个ImageViews,我需要为LinearLayout添加任何ImageView权重,并根据宽度更改视图的高度。
这就是我需要的:
因此,你可以看到我有4个视图,宽度相同,高度变化就像宽度一样。
在我告诉你我想要做什么之后,这就是我现在的状态:
这是布局:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/label_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toStartOf="@+id/label_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/a" />
<ImageView
android:id="@+id/label_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintBaseline_toBaselineOf="@id/label_1"
app:layout_constraintEnd_toStartOf="@+id/label_3"
app:layout_constraintStart_toEndOf="@id/label_1"
app:srcCompat="@drawable/a" />
<ImageView
android:id="@+id/label_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintBaseline_toBaselineOf="@id/label_1"
app:layout_constraintEnd_toEndOf="@id/label_4"
app:layout_constraintStart_toEndOf="@id/label_2"
app:srcCompat="@drawable/a" />
<ImageView
android:id="@+id/label_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintBaseline_toBaselineOf="@id/label_1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_3"
app:srcCompat="@drawable/a" />
</android.support.constraint.ConstraintLayout>
注意: 我的资产@ drawable / a是40X40
如何获得与我附加的示例相同的结果?
答案 0 :(得分:1)
有人会认为将四个图像视图放置在锚定到ConstraintLayout
父级的开头和结尾的链中,其高度为wrap_content
,如您所定义的那样,将得到所需的结果。不幸的是,在我最好的估计中,链条不足以迫使布局“打开”并假设正确的高度。布局中唯一给出布局高度的是你的drawables;链不会导致布局打开到足以承担指定的比率。
我不清楚这种行为是ConstraintLayout
是如何运作还是缺陷。无论如何,解决这个问题的方法是强制布局打开,让链条大小本身及其成员视图适当。要强制打开布局,我们将按如下方式定义Space
视图:
<Space
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toStartOf="@id/guide25"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
垂直指南设置为布局宽度的25%,因为每个ImageView
将占布局宽度的25%。 0dp
是match_constraints
。该比率强制Space
的正确高度,因此强制布局的高度。此Space
在布局中不可见,但足以为布局提供垂直维度。
整个XML文件如下。 label_3
处的链中存在错误,该错误已得到纠正。我还将所有ImageViews
的高度更改为0dp
,以便ImageViews
可以采用所需的比率。我确实删除了drawable,因此需要使用相应的scaleType
重新引入它们。您在屏幕截图中看到的是ImageViews
。
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.constraint.Guideline
android:id="@+id/guide25"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.25" />
<Space
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toStartOf="@id/guide25"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/label_1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FF00FF00"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toStartOf="@+id/label_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/label_2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FFFF0000"
app:layout_constraintBaseline_toBaselineOf="@id/label_1"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toStartOf="@+id/label_3"
app:layout_constraintStart_toEndOf="@id/label_1" />
<ImageView
android:id="@+id/label_3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FF0000FF"
app:layout_constraintBaseline_toBaselineOf="@id/label_1"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toStartOf="@id/label_4"
app:layout_constraintStart_toEndOf="@id/label_2" />
<ImageView
android:id="@+id/label_4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ffea00"
app:layout_constraintBaseline_toBaselineOf="@id/label_1"
app:layout_constraintDimensionRatio="W,1:1.15"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/label_3" />
</android.support.constraint.ConstraintLayout>