为什么我的android constraintLayout会丢失其底行的textview?

时间:2017-06-26 07:06:01

标签: android listview android-constraintlayout

我正在尝试将此布局用作列表视图中的标题,但内部约束布局下方的文本视图底行不可见 - 它的高度已折叠为零。 在xml中,内部constraintlayout声明在其下面有一条红线,带有弹出消息"此视图不是垂直约束的:在运行时它将跳转到左边,除非你添加一个垂直约束..." (跳到LEFT?这甚至有意义吗?)我试图添加像

这样的垂直约束

app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"

但是会发生什么是整个布局失去了它的高度。

当设计编辑器在不询问或警告我的情况下更改我的xml时,我也觉得很困惑。似乎想将layout_width和height元素设置为" 0dp"很多,并将指南宽度和高度设置为

android:layout_width="wrap_content" android:layout_height="wrap_content"

当唯一的元素是文本视图的底行时,我没有设置layout_width和layout_height,因为约束似乎可以完成工作。但是现在我已经添加了顶部" leaderinfo",设计师已将它们添加为" 0dp"。我知道我可以将它们重置为" wrap_content"然后文本视图将重新出现,但为什么这是必要的 - 设计师没有将它们设置为" 0dp"有充分理由吗?

感谢您的帮助!

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"

android:background="@color/listheaderbg"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.constraint.ConstraintLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:id="@+id/leaderinfo"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    android:background="@color/subsection1background"
    tools:layout_editor_absoluteY="0dp"
    tools:layout_editor_absoluteX="8dp">

    <ImageView
        android:layout_width="120dp"
        android:layout_height="120dp"
        app:layout_constraintStart_toStartOf="@+id/guideline01"
        android:id="@+id/iv_profilepic"
        android:src="@drawable/ic_flag"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="2dp"
        tools:layout_editor_absoluteX="21dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_username"
        tools:text="@string/username"
        android:paddingStart="10dp"
        android:paddingLeft="10dp"
        android:layout_marginTop="10dp"
        app:layout_constraintStart_toEndOf="@+id/iv_profilepic"
        app:layout_constraintTop_toTopOf="@+id/iv_profilepic"
        tools:layout_editor_absoluteX="150dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_firstname"
        tools:text="@string/first_name"
        android:paddingStart="10dp"
        android:paddingLeft="10dp"
        android:layout_marginTop="5dp"
        app:layout_constraintStart_toEndOf="@+id/iv_profilepic"
        app:layout_constraintTop_toBottomOf="@+id/tv_username"
        tools:layout_editor_absoluteX="150dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_lastname"
        tools:text="@string/last_name"
        android:paddingStart="10dp"
        android:paddingLeft="10dp"
        android:layout_marginTop="5dp"
        app:layout_constraintStart_toEndOf="@+id/iv_profilepic"
        app:layout_constraintTop_toBottomOf="@+id/tv_firstname"
        tools:layout_editor_absoluteX="150dp" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/floatingActionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:elevation="0dp"
        app:elevation="0dp"
        app:fabSize="mini"
        android:layout_marginTop="20dp"
        app:layout_constraintEnd_toStartOf="@+id/guideline04"
        app:srcCompat="@android:drawable/ic_input_add"
        app:layout_constraintTop_toTopOf="parent"
        android:tint="#FFFFFF"
        app:backgroundTint="@color/submitbuttoncolor_hotpink"
        tools:layout_editor_absoluteX="351dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="@+id/guideline01"
        android:id="@+id/iv_weight"
        android:src="@drawable/ic_scale"
        android:layout_marginTop="10dp"

        app:layout_constraintTop_toBottomOf="@+id/iv_profilepic"
        android:tint="@color/tealicon"
        tools:layout_editor_absoluteX="21dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_weight"
        tools:text="@string/_225"
        android:padding="5dp"
        app:layout_constraintStart_toEndOf="@+id/iv_weight"
        app:layout_constraintTop_toTopOf="@+id/iv_weight"
        app:layout_constraintBottom_toBottomOf="@+id/iv_weight"
        tools:layout_editor_absoluteX="62dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@+id/guideline02"
        android:id="@+id/iv_height"
        android:src="@drawable/ic_height"
        app:layout_constraintTop_toTopOf="@+id/iv_weight"
        android:tint="@color/tealicon"
        tools:layout_editor_absoluteX="206dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_height"
        tools:text="@string/_0_0"

        app:layout_constraintStart_toEndOf="@+id/iv_height"
        app:layout_constraintTop_toTopOf="@+id/iv_height"
        android:padding="5dp"
        app:layout_constraintBottom_toBottomOf="@+id/iv_height"
        tools:layout_editor_absoluteX="248dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="@+id/guideline01"
        android:id="@+id/iv_age"
        android:src="@drawable/ic_age"
        app:layout_constraintTop_toBottomOf="@+id/tv_weight"
        android:layout_marginTop="10dp"
        android:tint="@color/tealicon"
        tools:layout_editor_absoluteX="21dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_age"
        tools:text="23"
        app:layout_constraintStart_toEndOf="@+id/iv_age"
        app:layout_constraintTop_toTopOf="@+id/iv_age"
        android:padding="5dp"
        app:layout_constraintBottom_toBottomOf="@+id/iv_age"
        tools:layout_editor_absoluteX="62dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="@+id/guideline02"
        android:id="@+id/iv_country"
        android:src="@drawable/ic_flag"
        app:layout_constraintTop_toTopOf="@+id/iv_age"
        android:tint="@color/tealicon"
        tools:layout_editor_absoluteX="206dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_country"
        tools:text="CA"
        app:layout_constraintStart_toEndOf="@+id/iv_country"
        app:layout_constraintTop_toTopOf="@+id/iv_country"
        android:padding="5dp"
        app:layout_constraintBottom_toBottomOf="@+id/iv_country"
        tools:layout_editor_absoluteX="248dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv_followers"
        android:src="@drawable/ic_followers"
        app:layout_constraintStart_toStartOf="@+id/guideline01"
        app:layout_constraintTop_toBottomOf="@+id/tv_age"
        android:layout_marginTop="10dp"
        android:tint="@color/tealicon"
        tools:layout_editor_absoluteX="21dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/MyTextView.thin"
        android:id="@+id/tv_followers"
        tools:text="223"
        app:layout_constraintStart_toEndOf="@+id/iv_followers"
        app:layout_constraintTop_toTopOf="@+id/iv_followers"
        android:padding="5dp"
        app:layout_constraintBottom_toBottomOf="@+id/iv_followers"
        tools:layout_editor_absoluteX="62dp" />



    <android.support.constraint.Guideline
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/guideline01"
        app:layout_constraintGuide_percent="0.05"
        android:orientation="vertical"
        tools:layout_editor_absoluteY="81dp"
        tools:layout_editor_absoluteX="21dp" />

    <android.support.constraint.Guideline
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/guideline02"
        app:layout_constraintGuide_percent="0.5"
        android:orientation="vertical"
        tools:layout_editor_absoluteY="81dp"
        tools:layout_editor_absoluteX="206dp" />

    <android.support.constraint.Guideline
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/guideline03"
        app:layout_constraintGuide_percent="0.69"
        android:orientation="vertical"
        tools:layout_editor_absoluteY="81dp"
        tools:layout_editor_absoluteX="284dp" />

    <android.support.constraint.Guideline
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/guideline04"
        app:layout_constraintGuide_percent="0.95"
        android:orientation="vertical"
        tools:layout_editor_absoluteY="81dp"
        tools:layout_editor_absoluteX="391dp" />

</android.support.constraint.ConstraintLayout>

<TextView
    android:id="@+id/text1"
    style="@style/MyTextView"
    android:gravity="center"
    android:text="@string/exercise"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/guideline1"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/leaderinfo"
    android:layout_marginBottom="2dp"
    android:layout_marginTop="2dp"
    android:background="@color/listheaderbg"
    android:layout_height="0dp"
    android:layout_width="0dp" />

<TextView
    style="@style/MyTextView"
    app:layout_constraintStart_toEndOf="@+id/guideline1"
    app:layout_constraintEnd_toStartOf="@+id/guideline2"
    android:gravity="center"
    android:text="@string/rm1"
    android:id="@+id/text2"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/leaderinfo"
    android:layout_marginBottom="2dp"
    android:layout_marginTop="2dp"
    android:background="@color/listheaderbg"
    android:layout_height="0dp"
    android:layout_width="0dp"
    tools:layout_editor_absoluteX="213dp" />

<TextView
    style="@style/MyTextView"
    app:layout_constraintStart_toEndOf="@+id/guideline2"
    app:layout_constraintEnd_toEndOf="parent"
    android:gravity="center"
    android:text="@string/rm1bw"
    android:id="@+id/text3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/leaderinfo"
    android:layout_marginBottom="2dp"
    android:layout_marginTop="2dp"
    android:background="@color/listheaderbg"
    android:layout_height="0dp"
    android:layout_width="0dp"
    tools:layout_editor_absoluteX="310dp" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toEndOf="@+id/guideline3"
    app:layout_constraintEnd_toEndOf="parent"
    android:id="@+id/iv_rank"
    android:src="@drawable/ic_rank"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/leaderinfo"
    android:visibility="gone"
    android:background="@color/listheaderbg"
    tools:layout_editor_absoluteX="376dp" />

<android.support.constraint.Guideline
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/guideline1"
    app:layout_constraintGuide_percent="0.44"
    android:orientation="vertical"
    tools:layout_editor_absoluteY="0dp"
    tools:layout_editor_absoluteX="181dp" />

<android.support.constraint.Guideline
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/guideline2"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.71"
    tools:layout_editor_absoluteY="0dp"
    tools:layout_editor_absoluteX="292dp" />

<android.support.constraint.Guideline
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/guideline3"
    app:layout_constraintGuide_percent="0.83"
    android:orientation="vertical"
    tools:layout_editor_absoluteY="0dp"
    tools:layout_editor_absoluteX="341dp" />

1 个答案:

答案 0 :(得分:1)

关于需要垂直约束的内部布局的第一个问题,你只需要像这样限制顶部:

app:layout_constraintTop_toTopOf="parent"

由于高度为wrap_content,因此底部不需要约束。

关于底部文本视图,外部约束布局为wrap_content,因此如果文本视图的高度也为wrap_content,则布局可以确定外部容器的适当大小这是内部约束布局的高度+文本视图的高度。

但是如果文本视图设置为0dp,这意味着匹配约束,那么就存在无法解决的依赖关系。换句话说,文本视图高度的大小取决于外部约束布局的大小(匹配约束),但外部约束布局的大小取决于其内容的大小,包括文本视图的高度但是在不知道容器大小的情况下无法确定。它不可能两者兼而有之,所以设计师正试图通过你所提到的改变来帮助你摆脱这种困境。

底线是仅限制内部布局的顶部并指定文本视图的高度大小。如果您进行了这些更改,那么它应该可行。