ConstraintLayout 1.1.0与1.0.2不同,是不是一个bug?

时间:2018-04-19 03:05:53

标签: android android-layout android-constraintlayout

如果我使用1.0.2,则3个图像的宽度是平均值,并且它们的高度由我设置的无线电计算。如果我使用1.1.0,它们的高度为0dp,我看不到任何东西,除非我设置了 android:layout_height="match_parent"
在根ConstraintLayout

这是一个错误吗?这是我的代码:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/iv0"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#FF0000"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/iv1"
        app:layout_constraintDimensionRatio="2:1"/>

    <ImageView
        android:id="@+id/iv1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#00FF00"
        app:layout_constraintDimensionRatio="2:1"
        app:layout_constraintLeft_toRightOf="@id/iv0"
        app:layout_constraintRight_toLeftOf="@+id/iv2"/>

    <ImageView
        android:id="@+id/iv2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#0000FF"
        app:layout_constraintDimensionRatio="2:1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@id/iv1"/>

</android.support.constraint.ConstraintLayout>

1 个答案:

答案 0 :(得分:4)

根据the updated documentConstraintLayout 1.1.0中的布局行为发生了变化:

  

WRAP_CONTENT:强制执行约束(在1.1中添加)
  如果维度设置为WRAP_CONTENT,则在1.1之前的版本中,它们将被视为文字维度 - 这意味着约束不会限制生成的维度。虽然通常这足够(并且更快),但在某些情况下,您可能希望使用WRAP_CONTENT,但仍然强制执行约束来限制结果维度。在这种情况下,您可以添加一个相应的属性:

     
      
  • app:layout_constrainedWidth=”true|false”
  •   
  • app:layout_constrainedHeight=”true|false”
  •   

因此,在新版本中,XML中的这一行正在生效:

android:layout_height="0dp"

您可以使用以下方法解决问题:

android:layout_height="0dp"
app:layout_constrainedHeight="true"

写于this answer

更新

我误解了这个问题。正如KongDa所述,问题并未解决:

app:layout_constrainedHeight="true"

问题已解决:

app:layout_constraintWidth_percent="0.333" 

在最小样本应用中,我检查了它的行为如下。

第1步:ConstraintLayout 1.0.2

高度不为零。

enter image description here

第2步:ConstraintLayout 1.1.0

高度变为零。

enter image description here

第3步:ConstraintLayout 1.1.0

问题已通过app:layout_constraintWidth_percent="0.333"修复:

enter image description here

因此,布局XML是:

<?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">

    <ImageView
        android:id="@+id/iv0"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#FF0000"
        app:layout_constraintDimensionRatio="2:1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/iv1"
        app:layout_constraintWidth_percent="0.333" />

    <ImageView
        android:id="@+id/iv1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#00FF00"
        app:layout_constraintDimensionRatio="2:1"
        app:layout_constraintLeft_toRightOf="@id/iv0"
        app:layout_constraintRight_toLeftOf="@+id/iv2"
        app:layout_constraintWidth_percent="0.333" />

    <ImageView
        android:id="@+id/iv2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#0000FF"
        app:layout_constraintDimensionRatio="2:1"
        app:layout_constraintLeft_toRightOf="@id/iv1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintWidth_percent="0.333" />

</android.support.constraint.ConstraintLayout>