ConstraintLayout

时间:2017-08-27 11:26:29

标签: android android-layout android-constraintlayout

我有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="wrap_content"
    android:background="#EEEEEE"
    >

    <ImageView
        android:layout_width="4dp"
        android:layout_height="match_parent"
        android:background="@color/colorAccent"
        />

    <TextView
        android:text="12345678911131517192123252729313335373941434547495153555759616365676971737577798183858789"
        android:id="@+id/title"
        android:textSize="15sp"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="16dp"
        />

    <TextView
        android:text="  text text"
        android:id="@+id/prev"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/title"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="WHY WHY WHY"
        app:layout_constraintTop_toBottomOf="@+id/prev"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        />


</android.support.constraint.ConstraintLayout>

我们有以下结果: image with this issue

此外,如果我们将第一个TextView的文本更改为:&#34; 1234567891113151719212325272931333537394143454749515355575961636567697173757779818385878991&#34; (也就是说,再添加2个数字),最后一个TextView会停止关闭前一个数字。

另外,如果我们在最后一个TextView中将layout_marginBottom属性更改为0dp(并且文本将在示例中保留,则问题也会消失)。这个问题的原因是什么?如何解决?

更新

在左侧添加了一个具有match_parent高度的路径。因为这不能在ConstraintLayout中使用paddingBottom。该布局在RecyclerView中使用,这就是底部元素需要layout_marginBottom的原因。

5 个答案:

答案 0 :(得分:1)

要么从app:layout_constraintBottom_toBottomOf="parent"移除textview3,要么将布局的高度更改为match_parent

希望这有帮助! :)

答案 1 :(得分:0)

我认为删除app:layout_constraintBottom_toBottomOf="parent"会解决您的问题

出现此问题是因为您已经给出了父ConstraintLayout android:layout_height="wrap_content",因此它会自动尝试在指定的边界内进行自我排列

修改

我试过&amp;我在RecyclerView下面的代码测试过,希望它对您有用。

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

<!--Your Test ImageView-->
    <!--<ImageView
        android:layout_width="4dp"
        android:layout_height="match_parent"
        android:background="@color/colorAccent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />-->

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="8dp"
        android:text="12345678911131517192123252729313335373941434547495153555759616365676971737577798183858789"
        android:textSize="15sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/prev"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="8dp"
        android:text="  text text"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/title" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="8dp"
        android:paddingBottom="32dp"
        android:text="WHY WHY WHY"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/prev" />


</android.support.constraint.ConstraintLayout>

希望它有所帮助!

答案 2 :(得分:0)

错误发生是因为最后一个textview中的那一行app:layout_constraintBottom_toBottomOf="parent" ..因为ConstraintLayout就像一个RelativeLayout
jsut删除此行

答案 3 :(得分:0)

像其他人建议的那样从textview3中删除app:layout_constraintBottom_toBottomOf="parent",并将android:paddingBottom="8dp"添加到父constraintLayout。您还可以向textview3添加marginTop参数,以便从textview2中将其分隔开来。

答案 4 :(得分:0)

我遇到了一个非常类似的问题Problems with ConstraintLayout - vertical margin doesn't work,唯一的解决方案是使用&#34; packed&#34;垂直链。所有这些&#34; ...添加/删除layout_constraintBottom_toBottomOf =&#34; parent&#34; ...&#34;只是为特定情况解决问题的技巧。

这是您的布局与集成&#34;打包&#34;垂直链:

    59  All locations   2017-10-23T15:44:53
    12  Payroll and Benefits    2017-10-23 T06:26:44
    13  North York  2017-10-26T09:41:52
    14  CEO 2017-10-26T09:45:58
    15  Smart Buildings 2017-10-25T19:59:53


SELECT employee, location, max(lastupdated)
FROM employee
GROUP BY employee, location;

它适用于任何文本视图长度,并且ConstraintLayout正确包装其内容,请看这个gif:

Result view

您可以在https://github.com/eugenebrusov/cards找到使用ConstraintLayout构建的RecyclerView项目布局的更复杂实现。