将 ConstraintLayout 内的元素组水平居中

问题描述 投票:0回答:1

我必须在约束布局内放置三个组件:图像,并在图像右侧放置两个文本视图。两个文本视图均沿图像居中。 它们都应该在内部水平居中。

这是我的代码:

   <com.google.android.material.card.MaterialCardView
    android:id="@+id/downloadPlan"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    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_toEndOf="parent"
            app:layout_constraintEnd_toStartOf="@id/title"
            app:layout_constraintHorizontal_bias="0.4"
            app:layout_constraintHorizontal_chainStyle="packed"
            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_toStartOf="@id/icon"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/size"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/violet"
            android:textSize="12sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="@id/title"
            app:layout_constraintTop_toBottomOf="@id/title" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>

是否可以在不添加嵌套布局的情况下实现这种居中?

android android-constraintlayout
1个回答
0
投票
  1. 首先在父级中垂直排列标题和大小

    TextView
    。您可以使用链接将它们以打包链样式在父级中垂直居中。

  2. 然后将图标排列到标题上,并以打包链样式再次水平居中。

  3. 最后,您可以使图标与两个

    TextView
    居中,而不是将两个
    TextView
    置于图标中心。

下面是最终代码,忽略颜色和可绘制图标。

<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_add"
                android:tint="#000000"
                app:layout_constraintBottom_toBottomOf="@id/size"
                app:layout_constraintEnd_toStartOf="@id/title"
                app:layout_constraintHorizontal_chainStyle="packed"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="@id/title" />

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=" Download Test Plan"
                android:textColor="#000000"
                android:textSize="14sp"
                android:textStyle="bold"
                app:layout_constraintBottom_toTopOf="@id/size"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/icon"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_chainStyle="packed" />

            <TextView
                android:id="@+id/size"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="PDF"
                android:textColor="#000000"
                android:textSize="12sp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="@id/title"
                app:layout_constraintTop_toBottomOf="@id/title" />
</androidx.constraintlayout.widget.ConstraintLayout>

样本输出:

© www.soinside.com 2019 - 2024. All rights reserved.