代码之家  ›  专栏  ›  技术社区  ›  Nikolay Kulachenko

视图在ConstraintLayout中被推出其约束

  •  2
  • Nikolay Kulachenko  · 技术社区  · 7 年前

    我有一个 约束布局 用一个 图片框 和3个链子 文本视图 用一个 spread_inside 链式:

    <android.support.design.card.MaterialCardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/space_normal"
            android:paddingEnd="@dimen/space_normal"
            android:paddingStart="@dimen/space_normal"
            android:paddingTop="@dimen/space_big">
    
            <ImageView
                android:id="@+id/ivImage"
                android:layout_width="@dimen/feed_list_image_size"
                android:layout_height="@dimen/feed_list_image_size"
                android:layout_marginBottom="@dimen/space_normal"
                android:contentDescription="@null"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.0"
                tools:src="@color/debug_3" />
    
            <TextView
                android:id="@+id/tvTitle"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/space_normal"
                android:ellipsize="end"
                android:maxLines="3"
                android:textSize="@dimen/text_size_big"
                app:layout_constraintBottom_toTopOf="@+id/tvContent"
                app:layout_constraintEnd_toStartOf="@+id/ivImage"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_chainStyle="spread_inside"
                app:textAllCaps="true"
                tools:text="@tools:sample/lorem" />
    
            <TextView
                android:id="@+id/tvContent"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/space_big"
                android:layout_marginTop="@dimen/space_normal"
                android:ellipsize="end"
                android:maxLines="4"
                android:textColor="@color/gray_600"
                android:textSize="@dimen/text_size_normal"
                app:layout_constraintBottom_toTopOf="@+id/tvDate"
                app:layout_constraintEnd_toEndOf="@+id/tvTitle"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvTitle"
                tools:text="@tools:sample/lorem/random" />
    
            <TextView
                android:id="@+id/tvDate"
                style="@style/AppTheme.ItemFeedList.Date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/space_normal"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvContent"
                tools:text="@tools:sample/date/hhmm" />
    
        </android.support.constraint.ConstraintLayout>
    
    </android.support.design.card.MaterialCardView>
    

    这将在编辑器中呈现一个漂亮而灵活的布局:

    layout

    layout_short_text

    但有时顶视图会被“推”出它的约束,因此文本呈现是错误的(剪裁)。是wierd因为 在里面散开 链式应该膨胀和缩小中间的看法。从 布局检查器 :

    layout_wierd

    怎么了?

    1 回复  |  直到 7 年前
        1
  •  8
  •   Cheticamp    7 年前

    在版本1.1中所做的更改 ConstraintLayout 可能会帮助你。尝试设置 app:layout_constrainedHeight=”true” 论你的麻烦 TextView . 从 developer guide for ConstraintLayout :

    包装内容:强制约束(在1.1中添加)

    如果维度被设置为包装内容,在1.1之前的版本中,它们将被视为文本维度——这意味着,约束不会限制生成的维度。一般来说,这已经足够了(而且速度更快),但在某些情况下,您可能希望使用wrap_内容,同时继续实施约束以限制生成的维度。在这种情况下,可以添加相应的属性之一:

    app:layout_constrainedWidth=true false
    app:layout_constrainedHeight=true_false_