Android layout 在ConstraintLayout中处理GONE视图难题
我有一个外观足够简单的布局,单使用xml是一个相当棘手的行为,即只使用ConstraintLayout的功能,而不必以编程方式执行任何操作 我考虑过障碍和指导线,以及许多没有成功的场景和试验;所以这是我最后的希望,也许其他人知道一些我不知道的事情 这是我的难题:Android layout 在ConstraintLayout中处理GONE视图难题,android-layout,android-constraintlayout,Android Layout,Android Constraintlayout,我有一个外观足够简单的布局,单使用xml是一个相当棘手的行为,即只使用ConstraintLayout的功能,而不必以编程方式执行任何操作 我考虑过障碍和指导线,以及许多没有成功的场景和试验;所以这是我最后的希望,也许其他人知道一些我不知道的事情 这是我的难题: 如果有3条线可见->图像应在第1行和第2行之间居中 二, 如果有两条线可见->图像应在第1行和第2行之间居中 第2行 如果1行可见(标签文本)->图像应居中于父对象,或 中心与第1行对齐(标签文字) 以下是一些图片来说明: 3行-正
- 如果有3条线可见->图像应在第1行和第2行之间居中 二,
- 如果有两条线可见->图像应在第1行和第2行之间居中 第2行
- 如果1行可见(标签文本)->图像应居中于父对象,或 中心与第1行对齐(标签文字)
行是否始终对应于同一文本视图?例如,如果顶行是TextView#1,那么第一行可以是TextView#2吗?其他行也一样。@Cheticamp 3永远不会改变,只有它们的可见性可能会改变,顶部永远是“label_text”。华丽,适用于所有情况。我将添加我提出的另一个解决方案,以编程方式实现它,但我将使用您的解决方案,因为它是完美的。非常感谢。
<androidx.constraintlayout.widget.ConstraintLayout
style="@style/V2.ItemList.Background"
android:minHeight="@dimen/item_minimum_height"
android:paddingVertical="@dimen/=margin_vertical">
<ImageView
android:id="@+id/icon"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
tools:src="@drawable/ic_img"
tools:visibility="visible" />
<TextView
android:id="@+id/label_text"
app:layout_constraintBottom_toTopOf="@id/line1_text"
app:layout_constraintEnd_toStartOf="@id/right_content"
app:layout_constraintStart_toEndOf="@id/icon_start"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="Label" />
<TextView
android:id="@+id/line1_text"
android:layout_marginTop="4dp"
app:layout_constraintBottom_toTopOf="@id/line2_text"
app:layout_constraintEnd_toStartOf="@id/right_content"
app:layout_constraintStart_toEndOf="@id/icon"
app:layout_constraintTop_toBottomOf="@id/label_text"
tools:text="Line 1"
tools:visibility="gone" />
<TextView
android:id="@+id/line2_text"
android:layout_marginTop="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/right_content"
app:layout_constraintStart_toEndOf="@id/icon"
app:layout_constraintTop_toBottomOf="@id/line1_text"
tools:text="Line 2"
tools:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>
private fun adjustConstraints() {
if(binding.line1Text.isGone && binding.line1Text.isGone) {
ConstraintSet().apply {
clone(binding.itemListLayout)
// Adjust left/start content for single line
connect(
R.id.icon,
ConstraintSet.TOP,
R.id.item_list_layout,
ConstraintSet.TOP
)
connect(
R.id.icon,
ConstraintSet.BOTTOM,
R.id.item_list_layout,
ConstraintSet.BOTTOM
)
// Adjust right/end content for single line
connect(
R.id.right_content,
ConstraintSet.TOP,
R.id.item_list_layout,
ConstraintSet.TOP
)
connect(
R.id.right_content,
ConstraintSet.BOTTOM,
R.id.item_list_layout,
ConstraintSet.BOTTOM
)
}.also {
it.applyTo(binding.itemListLayout)
}
}
}
<ImageView
android:id="@+id/icon"
app:layout_constraintTop_toTopOf="@id/label_text"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/line1_text"
tools:src="@drawable/ic_img"
tools:visibility="visible" />