我的布局如下:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="@+id/textView5"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/backgrounds/scenic[1]" />
<View
android:id="@+id/view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@+id/imageView4"
app:layout_constraintEnd_toEndOf="@+id/imageView4"
app:layout_constraintStart_toStartOf="@+id/imageView4"
app:layout_constraintTop_toTopOf="@+id/imageView4" />
<TextView
android:id="@+id/textView5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
基本上,View
覆盖在ImageView
的顶部。但是,我需要View
的顶部从ImageView
的中点开始,即从ImageView
的顶部开始50%。我该怎么做?
答案 0 :(得分:2)
ConstraintLayout
中的百分比约束仅与视图的父级相关。请参见documentation。但是,对于具有match_constraints
的小部件,存在“加权链”的概念。参见here。
加权链
链的默认行为是将元素平均分布在可用空间中。如果一个或多个元素正在使用MATCH_CONSTRAINT,则它们将使用可用的空白空间(在它们之间平均分配)。属性layout_constraintHorizontal_weight和layout_constraintVertical_weight将控制如何使用MATCH_CONSTRAINT在元素之间分配空间。例如,在包含两个使用MATCH_CONSTRAINT的元素的链上,第一个元素的权重为2,第二个元素的权重为1,第一个元素所占的空间将是第二个元素的两倍。
因此,您的XML应该看起来像以下结果。 (我为View
的背景加上了颜色,因此可以看到它。
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:scaleType="centerCrop"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/backgrounds/scenic[1]" />
<Space
android:id="@+id/space"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:background="@android:color/holo_blue_light"
app:layout_constraintBottom_toTopOf="@id/view"
app:layout_constraintEnd_toEndOf="@id/imageView4"
app:layout_constraintStart_toStartOf="@id/imageView4"
app:layout_constraintTop_toTopOf="@id/imageView4"
app:layout_constraintVertical_weight="1" />
<View
android:id="@+id/view"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintBottom_toBottomOf="@+id/imageView4"
app:layout_constraintEnd_toEndOf="@+id/imageView4"
app:layout_constraintStart_toStartOf="@+id/imageView4"
app:layout_constraintTop_toBottomOf="@+id/space"
app:layout_constraintVertical_weight="1" />
<TextView
android:id="@+id/textView5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
答案 1 :(得分:0)
由于ImageView
是正方形,因此您也可以在此处使用尺寸比例属性。删除View
的顶部约束以使其与底部对齐,并将width:height比率设置为H,2:1
以根据宽度约束高度。
<View
android:id="@+id/view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="H,2:1"
app:layout_constraintBottom_toBottomOf="@id/imageView4"
app:layout_constraintEnd_toEndOf="@id/imageView4"
app:layout_constraintStart_toStartOf="@id/imageView4" />