ConstraintLayout边距不起作用

如果我限制的视图的可见性marginTop则使用下面的xml将忽略marginTop

这种情况发生在最新版本的lib版本com.android.support.constraint:constraint-layout:1.0.0-beta4

例:

tvMessageivCommentImagevisibletvMessageivCommentImage上的16dp顶部边距工作正常。 如果ivCommentImage gone ,边距将被忽略。

 <android.support.v7.widget.CardView 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="16dp"> <!-- some more views here --> <TextView android:id="@+id/tvMessage" style="@style/SocialFeed.Description" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/ivProfile" app:layout_goneMarginTop="0dp" tools:text="@string/lorem_ipsum_140chars"/> <android.support.v7.widget.AppCompatImageView android:id="@+id/ivCommentImage" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:adjustViewBounds="true" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvMessage" app:layout_goneMarginTop="0dp" /> <android.support.constraint.Guideline android:id="@+id/gCenter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.5"/> <LinearLayout android:id="@+id/llLeftActions" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center_vertical|left" android:orientation="horizontal" app:layout_constraintLeft_toLeftOf="@+id/tvMessage" app:layout_constraintRight_toLeftOf="@+id/gCenter" app:layout_constraintTop_toBottomOf="@+id/ivCommentImage" app:layout_goneMarginTop="0dp" /> <LinearLayout android:id="@+id/llRightActions" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center_vertical|right" android:orientation="horizontal" app:layout_constraintLeft_toLeftOf="@+id/gCenter" app:layout_constraintRight_toRightOf="@+id/tvMessage" app:layout_constraintTop_toBottomOf="@+id/ivCommentImage" app:layout_goneMarginTop="0dp"/> </android.support.constraint.ConstraintLayout> </android.support.v7.widget.CardView> 

Solutions Collecting From Web of "ConstraintLayout边距不起作用"

它的工作完全按照预期 – 请注意,您在@id/llLeftActions@id/llRightActions上添加了layout_goneMarginTop="0dp"

这意味着,当他们指向的小部件( @id/ivCommentImage )被标记为不存在时,将用于顶部连接的边距将是… 0dp,而不是16dp的边距。 这就是这些属性在这里! 🙂

检查有关可见性行为的文档,并删除了边距属性

 <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Available chats" tools:layout_editor_absoluteX="1dp" tools:layout_editor_absoluteY="1dp" /> <ListView android:id="@+id/listChats" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@+id/textView"/> 

请注意最后一行,在边缘周围添加约束使约束生效。

您也可以在Studio中使用devise视图,并在对象之间拖放约束。