如何在ConstraintLayout中水平居中元素组且无需嵌套布局?
无需嵌套布局实现目标布局效果
完全可以不用额外嵌套布局,只需要调整现有ConstraintLayout内的约束即可实现需求:图片右侧上下排列两个TextView,三者垂直居中对齐,且整个元素组水平居中。
修正后的完整代码:
<com.google.android.material.card.MaterialCardView android:id="@+id/downloadPlan" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:clickable="true" android:focusable="true" app:cardBackgroundColor="@color/orange" app:cardCornerRadius="32dp" app:cardElevation="0dp"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="12dp" android:paddingBottom="12dp"> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/icon" android:layout_width="20dp" android:layout_height="20dp" android:layout_marginEnd="12dp" android:adjustViewBounds="true" android:contentDescription="@null" android:src="@drawable/ic_download" android:tint="@color/violet" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/title" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/violet" android:textSize="14sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/icon" app:layout_constraintTop_toTopOf="@id/icon" /> <TextView android:id="@+id/size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:textColor="@color/violet" android:textSize="12sp" app:layout_constraintBottom_toBottomOf="@id/icon" app:layout_constraintStart_toStartOf="@id/title" app:layout_constraintTop_toBottomOf="@id/title" /> </androidx.constraintlayout.widget.ConstraintLayout> </com.google.android.material.card.MaterialCardView>
关键约束说明:
- 水平居中与链设置:给
icon设置app:layout_constraintStart_toStartOf="parent",同时和title建立水平链(app:layout_constraintHorizontal_chainStyle="packed"),配合android:layout_constraintHorizontal_bias="0.5",让整个icon+TextView组水平居中。 - 垂直对齐:
icon的上下约束绑定到parent,title的顶部对齐icon顶部,size的底部对齐icon底部,同时size顶部接title底部,这样两个TextView整体和icon垂直居中对齐。 - 移除错误约束:删掉原代码中
icon的app:layout_constraintEnd_toEndOf="parent"(和End_toStartOf冲突),以及title的app:layout_constraintStart_toStartOf="@id/icon"(应该是Start_toEndOf),修正后布局逻辑清晰。
内容的提问来源于stack exchange,提问作者E I
相关产品推荐
相关产品推荐

