约束布局打包链+尺寸比,高度不正确

时间:2017-11-09 20:37:12

标签: android android-constraintlayout

我有以下布局:

<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="match_parent"
    android:padding="32dp">

    <android.support.constraint.Guideline
        android:id="@+id/icon_guide_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent=".2"/>

    <android.support.constraint.Guideline
        android:id="@+id/icon_guide_end"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent=".8"/>

    <ImageView
        android:id="@+id/icon"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintWidth_max="600dp"
        app:layout_constraintVertical_chainStyle="packed"
        app:layout_constraintStart_toStartOf="@+id/icon_guide_start"
        app:layout_constraintEnd_toEndOf="@+id/icon_guide_end"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/message"
        app:layout_constraintDimensionRatio="H,1:1"
        tools:src="@drawable/ic_launcher_background"/>

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/icon"
        app:layout_constraintBottom_toTopOf="@+id/action"
        tools:text="Nothing to see here"/>

    <Button
        android:id="@+id/action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/message"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:text="Reload"/>

</android.support.constraint.ConstraintLayout>

icon应占用屏幕的60%,最高可达600dp,宽高比为1:1。接下来(在它下面)我想要一个消息和一个动作。使用约束布局1.0.2运行此布局时icon视图的高度计算为0.如果我删除链样式packed,则图标大小合适,但视图不再以屏幕为中心。我可以将它们包装在一个垂直的LinearLayout中并使其居中,但后来我失去了messageicon宽的能力。

这是约束布局库中的错误吗?有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您的布局看起来与git status 1.1.0-beta3一起使用。至少它看起来像这样:

enter image description here

如果这是您所期望的,那么它将在以后的非生产版本中修复。请参阅与beta3版本相关的this documentation。它提到了修复“链中比例”错误修复可能是这个问题。

答案 1 :(得分:0)

我花了一些时间玩你的布局。我认为你已经发现系统以一种意想不到的方式解决了一系列限制。我无法找到解决问题的方法,尽管我还在犹豫地哭泣 bug

一些有趣的观察:

  • 布局&#34;工作&#34;对我来说,如果我删除了最大宽度约束
  • 如果我删除宽高比约束并将链样式更改为spread,则图像视图的边界会增长以消耗所有可用高度
  • 如果删除纵横比约束并将最大宽度更改为100dp,则图像视图的边界将更改为100x0(而不是0x0)

这让我相信packed链样式和H,1:1纵横比是&#34;格斗&#34;彼此确定视图的尺寸。假设packed表示&#34;使每个视图尽可能短&#34;,系统可以通过将视图的维度设置为0x0来成功满足所有约束。