【问题标题】:Constraint Layout doesn't seem to render correctly in case of wrap_content在 wrap_content 的情况下,约束布局似乎无法正确呈现
【发布时间】:2018-05-14 08:00:31
【问题描述】:

我制作了这个简单的屏幕。我故意这样做是为了表明约束布局在 wrap_content 的情况下不能正常工作。我知道我可以将 constraint_layout 设为父级,这不会导致问题,但我想了解这不起作用的原因。

<FrameLayout 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="match_parent"
    tools:context="com.konel.kryptapps.testapp.MainActivity">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/textView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="16dp"
            android:textSize="16sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="text view 1" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:textSize="14sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/textView"
            tools:text="text view 2" />
    </android.support.constraint.ConstraintLayout>
</FrameLayout>

此 xml 导致底部文本视图与顶部重叠。它对上边距的约束没有得到遵守。但是,如果我将顶部 textview 的文本大小更改为 14sp,它会完美运行。

下面是布局绑定截图:

我以编程方式设置了文本。第一个文本视图包含来自 lorem ipsum 的 100 个单词。我不明白我做错了什么。

附:我正在使用 com.android.support.constraint:constraint-layout:1.0.2

【问题讨论】:

  • TextView高度改为0dp
  • @StanislavBondar 将高度更改为 0dp 会将 TextView 限制为顶部和底部约束。由于约束不能有负值,因此 TextView 的高度不能大于屏幕高度。因此,您的解决方案可能仅适用于特定情况。如果您希望 TextView 比屏幕尺寸更大,您应该使用 wrap_content 并可能将您的 TextView 放入 ScrollView 或 RecyclerView。看看stackoverflow.com/questions/46584315/…

标签: android android-constraintlayout


【解决方案1】:

您可能需要使用Constrain Chain

【讨论】:

    【解决方案2】:

    您需要为textView 设置app:layout_constraintBottom_toTopOf="@id/textView2" 才能正确渲染

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:textSize="16sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="packed"
        app:layout_constraintBottom_toTopOf="@id/textView2"
        android:text="@string/lorem"/>
    

    【讨论】:

    • 为什么投反对票?!这真正解决问题的一种方法。
    • 投反对票的不是我,但除了添加 app:layout_constraintBottom_toTopOf="@id/textView2" 你还应该添加打包的垂直链。看看我的问题stackoverflow.com/questions/46584315/…
    • @EugeneBrusov 即使没有指定spread 垂直链,它也是默认的chainStyle。在这种情况下,ConstraintLayout 的高度为 wrap_content,3 个chainStyles 中的任何一个都将类似地工作,因为不会在布局中分配任何额外空间。
    • 是的,你又是对的,但是垂直传播链不尊重视图之间的边距。我的意思是,如果您在垂直排列的两个视图之间指示 10dp,那么您可能不会因此得到 10dp。看这个答案和我的回复stackoverflow.com/a/46584366/7158449 或者更好看这个答案和回复stackoverflow.com/a/46588743/7158449
    • 希望能帮助您构建像素完美的布局,让设计师和项目经理开心 ;-)
    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 2022-11-02
    • 2020-01-10
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多