Android ConstraintLayout下GridView卡片实现类Bootstrap三段式布局
解决方案
布局不符合预期的核心原因有三点:
- 根ConstraintLayout宽度设置为
wrap_content,导致内容区没有铺满CardView - footer的左右约束绑定了内部的name、image控件,而非父布局,进一步限制了footer的宽度
- footer的LinearLayout内部没有做空间分配,三个子控件只会按自身宽度紧凑排列
修改步骤
- 将根ConstraintLayout的
android:layout_width从wrap_content改为match_parent,高度改为match_parent撑满整个CardView - 修改footer的约束,将
layout_constraintStart_toStartOf和layout_constraintEnd_toEndOf都绑定到parent,让footer占满CardView宽度 - 给footer的LinearLayout设置
android:weightSum="3",三个子控件各分配android:layout_weight="1",每个控件设置android:gravity="center"实现左中右均匀分布 - 调整minus控件的宽度规则,避免符号显示不全,可按需给LinearLayout设置固定高度更美观
完整修改后代码
<?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="350dp" android:layout_margin="@dimen/margin_small" card_view:cardCornerRadius="10dp" card_view:cardElevation="@dimen/margin_small"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="@dimen/margin_small" android:layout_gravity="center"> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/name" card_view:layout_constraintTop_toTopOf="parent" card_view:layout_constraintBottom_toTopOf="@+id/cost" card_view:layout_constraintStart_toStartOf="parent" android:maxLines="3" android:padding="9dp" android:textAppearance="?android:attr/textAppearanceSmall"/> <TextView android:id="@+id/cost" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ksh_000_00" card_view:layout_constraintTop_toBottomOf="@+id/name" card_view:layout_constraintBottom_toTopOf="@+id/image" card_view:layout_constraintStart_toStartOf="parent" android:textAppearance="?android:attr/textAppearanceSmall" android:typeface="serif"/> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="150dp" android:contentDescription="@string/food_fuzz_logo" android:src="@drawable/logo" card_view:layout_constraintBottom_toTopOf="@+id/footer" card_view:layout_constraintEnd_toEndOf="parent" card_view:layout_constraintStart_toStartOf="parent" card_view:layout_constraintTop_toBottomOf="@+id/cost" tools:scaleType="fitCenter" /> <LinearLayout android:id="@+id/footer" android:layout_width="match_parent" android:layout_height="40dp" card_view:layout_constraintTop_toBottomOf="@+id/image" card_view:layout_constraintBottom_toBottomOf="parent" card_view:layout_constraintEnd_toEndOf="parent" card_view:layout_constraintStart_toStartOf="parent" android:orientation="horizontal" android:weightSum="3" android:background="@color/gradient_background"> <TextView android:id="@+id/minus" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="@string/minus" android:textColor="@color/white" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/quantity" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="@string/zero" android:textColor="@color/white" android:textSize="18sp" android:textStyle="bold" android:gravity="center"/> <TextView android:id="@+id/plus" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="@string/plus" android:textColor="@color/white" android:textSize="18sp" android:textStyle="bold" android:gravity="center"/> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.cardview.widget.CardView>
内容的提问来源于stack exchange,提问作者The Only Smart Boy
相关产品推荐
相关产品推荐

