2017-11-09 4 views
1

Iは、次のレイアウトを持っている:制約レイアウト充填鎖+寸法比、誤った高さ

<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 1のアスペクト比を600dpと持ってスクリーンの60%を消費しなければならない:1。次の(その下)メッセージと行動をしたい。このレイアウトを制約レイアウト1.0.2で実行する場合iconビューの高さは0に計算されます。チェーンスタイルpackedを削除すると、アイコンのサイズは適切ですが、ビューは画面の中央に表示されなくなります。私はこれらを垂直のLinearLayoutでラップして中心に置くことができますが、messageの能力はiconよりも大きくなりません。

これは制約レイアウトライブラリのバグですか?これを回避する方法はありますか?

答えて

1

あなたのレイアウトはConstraintLayout 1.1.0-beta3と同じように見えます。これは、あなたがそれを後で非生産バージョンで修正されて期待しているものであれば

enter image description here

:少なくともそれはこのようになります。ベータ3リリースに関連するthis documentationを参照してください。これは、この問題の可能性がある「連鎖比」バグ修正に対する修正を述べています。

0

あなたのレイアウトで遊んでいました。私は、システムが予期しない方法で解決する一連の制約を見つけたと思います。私はあなたの問題を回避する方法を見つけることができませんでしたが、私はバグの泣きを躊躇しています。

いくつかの興味深い観測:私はアスペクト比の制約を削除し、spreadにチェーンのスタイルを変更した場合、私は最大幅の制約

  • を削除した場合

    • レイアウトは、私のための境界を「働いていました」画像ビューは、
    私はアスペクト比の制約を削除して(0x0のとは対照的に)、100dpに100x0に画像表示変化の境界を最大幅を変更すると、すべての利用可能な高さ
  • を消費するために成長します

    これは、packedのチェーンスタイルとH,1:1のアスペクト比が、あなたのビューの寸法を決定するために互いに「戦っている」と信じています。 packedは「各ビューを可能な限り短くする」という意味で、ビューのサイズを0x0に設定することで、システムはすべての制約を満たすことができます。