web-dev-qa-db-ja.com

ConstraintLayoutは最大の高さを尊重しません

ConstraintLayoutを使用してレイアウト構成を作成しようとしています。ケースを簡素化するために、レイアウトには3つの部分が必要です。

  1. 最初のレイアウト(赤)。残りのスペースに応じて拡大する必要があり、最大の高さがあります。
  2. 150dpの固定サイズで、常に最初のレイアウトの下にある2番目のレイアウト(緑色)。
  3. 最初のレイアウト(ピンク色)も150dpの固定サイズであり、ビューの下部に配置する必要があります。

私が苦労しているのは、最初のレイアウトの最大高さを設定することです(赤)。 ConstraintLayoutは私の「最大高さステートメント」を無視しているようです:

app:layout_constraintHeight_max="300dp"

これが私の現在の結果です(赤い部分は高さの制限を無視します。):

enter image description here

完全なXMLは次のとおりです。

<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:id="@+id/coordinatorLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/white"
tools:context="com.mixtiles.Android.reviewOrder.ReviewOrderActivity"
tools:layout_editor_absoluteY="25dp">


<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appBarLayout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/white">
        <Android.support.v7.widget.Toolbar
            Android:id="@+id/review_order_toolbar"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:elevation="4dp"
            Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
        </Android.support.v7.widget.Toolbar>
</Android.support.design.widget.AppBarLayout>

<FrameLayout
    Android:id="@+id/red"
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    Android:background="@color/red"
    app:layout_constraintBottom_toTopOf="@+id/green"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_max="300dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
    app:layout_constraintVertical_chainStyle="spread_inside">

</FrameLayout>


<FrameLayout
    Android:id="@+id/green"
    Android:layout_width="0dp"
    Android:layout_height="150dp"
    Android:background="@color/greenish"
    app:layout_constraintBottom_toTopOf="@+id/pink"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/red">

</FrameLayout>

<FrameLayout
    Android:id="@+id/pink"
    Android:layout_width="match_parent"
    Android:layout_height="150dp"
    Android:background="@color/pink"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/green">

</FrameLayout>
14
Rom Shiri
Android:layout_height="wrap_content"
app:layout_constraintHeight_max="300dp"
app:layout_constrainedHeight="true"

必ず高さwrap_contentを設定してください

19
elham shahidi

問題は、赤いビューでこれらの両方の制約を同時に設定できないことです。

app:layout_constraintBottom_toTopOf="@+id/green"app:layout_constraintTop_toBottomOf="@+id/appBarLayout"

これらの両方の制約が設定されている場合、赤いビューはappBarLayoutの上部、緑のビューの下部にアタッチされます。つまり、これらの2つのビュー間のすべてのスペースを占有します。

最大高さの制約を尊重する場合は、これらの2つの制約のいずれかを削除する必要があります。どちらを削除するかは、期待する最終結果の種類によって異なります。

古い回答

Android:maxHeightの代わりにapp:layout_constraintHeight_maxを使用する必要があると思います。

0
markusian