Android 如何根据材质设计规范为两行列表项创建布局

Android 如何根据材质设计规范为两行列表项创建布局,android,material-design,android-constraintlayout,Android,Material Design,Android Constraintlayout,我想根据列表组件的材质设计规范为简单的两行列表项创建布局。看见 我正在尝试创建两行规范中的第一项 我可以将第一个TextView 28dp的底部与顶部对齐,可能带有一个ConstraintLayout和一个指南。第二个TextView的情况也一样,第一个TextView的底部有20dp 问题是TextView应该与基线对齐,而不是与视图的底部对齐,我不知道如何实现这一点 我曾尝试在文本视图中将ConstraintLayout与指南和app:layout_constraintBaseline_to

我想根据列表组件的材质设计规范为简单的两行列表项创建布局。看见 我正在尝试创建两行规范中的第一项

我可以将第一个TextView 28dp的底部与顶部对齐,可能带有一个ConstraintLayout和一个指南。第二个TextView的情况也一样,第一个TextView的底部有20dp

问题是TextView应该与基线对齐,而不是与视图的底部对齐,我不知道如何实现这一点

我曾尝试在文本视图中将ConstraintLayout与指南和app:layout_constraintBaseline_toBaselineOf一起使用,但据我所知,这不应该起作用,因为指南没有基线

一个简单的ConstraintLayout,包含两个应与基线对齐的文本视图:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?textAppearanceSubtitle1"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?textAppearanceCaption"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

我只在textview的顶部和底部填充,因为如果你计算它是16dp。您还可以将此填充添加到约束布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="72dp">

    <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="@dimen/burger_margin" />

    <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline_end"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_end="@dimen/burger_margin" />

    <TextView
            android:id="@+id/two_line_list_item_title"
            android:textAppearance="?textAppearanceSubtitle1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingTop="16dp"
            app:layout_constraintBottom_toTopOf="@id/textBody2"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="@id/guideline_start"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." />

    <TextView
            android:id="@+id/textBody2"
            android:textAppearance="?textAppearanceCaption"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingBottom="16dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="@id/guideline_end"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@id/guideline_start"
            app:layout_constraintTop_toBottomOf="@+id/two_line_list_item_title"
            tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." />

</androidx.constraintlayout.widget.ConstraintLayout>

如果我理解正确@SebastienRieu,您的视图高72 dp,第一个文本视图的基线到父视图顶部应该是32 dp,您已经计算了paddingTop到16 dp,所以文本视图顶部和基线之间的距离是16 dp?对于第二个文本视图,从基线到视图底部的距离是4dp?(72-32-20=20,所以paddingBottom+bottom-to-baseline应该是20)你是如何计算的?如果我为其中一个文本外观更改textSize,整个事件应该会中断?