【问题标题】:How do I create a layout for a two-line list item according to the Material Design specification如何根据 Material Design 规范为两行列表项创建布局
【发布时间】:2020-02-14 12:23:20
【问题描述】:

我想根据列表组件的 Material Design 规范为简单的两行列表项创建布局。见https://material.io/components/lists/#specs 我正在尝试创建两行规范中的第一项。

我可以将第一个 TextView 28dp 的底部与顶部对齐,可能使用 ConstraintLayout 和 Guideline。与第一个 TextView 底部相距 20dp 的辅助 TextView 也是如此。

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

我尝试在 TextView 中使用带有 Guideline 和 app:layout_constraintBaseline_toBaselineOf 的 ConstraintLayout 到 Guideline,但据我了解,这不应该作为 Guideline 没有基线。

一个简单的 ConstraintLayout,有两个应该与基线对齐的 TextView:

<?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>

【问题讨论】:

    标签: android material-design android-constraintlayout


    【解决方案1】:

    我只用 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 你的视图是 72dp 高,第一个 TextView 应该是 32dp 基线到父级顶部,你已经计算了 paddingTop 到 16dp 所以 TextView 顶部和基线之间的距离是16dp?而对于第二个 TextView,从基线到视图底部的距离是 4dp? (72 - 32 - 20 = 20 所以 paddingBottom + bottom-to-baseline 应该是 20) 你是怎么计算的?如果我更改其中一个 textAppearances 的 textSize,整个事情应该会中断?
    猜你喜欢
    • 2014-12-10
    • 2016-09-05
    • 2015-07-03
    • 2020-11-06
    • 1970-01-01
    • 2015-05-07
    • 2019-12-30
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多