我有以下布局:
<?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的原因。
答案 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:
您可以在https://github.com/eugenebrusov/cards找到使用ConstraintLayout构建的RecyclerView项目布局的更复杂实现。