约束布局中高度为0dp的对话框布局无法正常工作

5

目前使用约束布局创建对话框并将视图定位如下,但使用0dp的视图高度无效。

这里recyclerview不可见。

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:bind="http://schemas.android.com/tools">
    <data>
        <variable
            name="passengerSeatViewModel"
            type="PassengerSeatViewModel" />
        <variable
            name="seatSelectionViewModel"
            type="SeatSelectionViewModel" />
    </data>
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorWhite">
        <android.support.constraint.Guideline
            android:id="@+id/guideline_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="@dimen/_20dp" />
        <android.support.constraint.Guideline
            android:id="@+id/guideline_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_end="@dimen/_20dp" />
        <include
            android:id="@+id/header"
            layout="@layout/dialog_header"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toRightOf="@+id/guideline_left"
            app:layout_constraintRight_toLeftOf="@+id/guideline_right"
            bind:header="@{@string/text_seat_selected_for}"
            bind:onCancelClick="@{passengerSeatViewModel}" />
        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/tv_segment"
            style="@style/TextStyle_L_Black"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/_5dp"
            android:layout_marginLeft="@dimen/_5dp"
            android:drawableEnd="@drawable/green_filled_tick"
            android:drawableRight="@drawable/green_filled_tick"
            android:drawablePadding="@dimen/_5dp"
            android:gravity="center"
            android:text="@{seatSelectionViewModel.getSelectedSegment()}"
            app:layout_constraintLeft_toRightOf="@+id/guideline_left"
            app:layout_constraintTop_toBottomOf="@+id/header" />
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_passengers"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="@dimen/_3dp"
            app:layout_constraintBottom_toTopOf="@+id/barrier_select_seats"
            app:layout_constraintLeft_toLeftOf="@+id/guideline_left"
            app:layout_constraintRight_toRightOf="@+id/guideline_right"
            app:layout_constraintTop_toBottomOf="@+id/tv_segment"
            bind:data="@{seatSelectionViewModel.passengerAdapterViewModel}"
            bind:passengerViewModel="@{passengerSeatViewModel}" />
        <android.support.constraint.Group
            android:id="@+id/group_copy"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"
            app:constraint_referenced_ids="btn_copy_seat,tv_or,seperator_left,seperator_right" />
        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btn_copy_seat"
            style="@style/AppBtnStyle_Disable"
            android:layout_width="0dp"
            android:text="@string/text_copy_same_seat"
            app:layout_constraintLeft_toLeftOf="@+id/guideline_left"
            app:layout_constraintRight_toRightOf="@+id/guideline_right"
            app:layout_constraintTop_toBottomOf="@+id/rv_passengers" />
        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/tv_or"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/_20dp"
            android:paddingLeft="@dimen/_23dp"
            android:paddingRight="@dimen/_23dp"
            android:text="@string/or"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btn_copy_seat" />
        <View
            android:id="@+id/seperator_left"
            android:layout_width="0dp"
            android:layout_height="@dimen/_1dp"
            android:background="@color/colorDividerSearch"
            app:layout_constraintBottom_toBottomOf="@+id/tv_or"
            app:layout_constraintLeft_toRightOf="@+id/guideline_left"
            app:layout_constraintRight_toLeftOf="@+id/tv_or"
            app:layout_constraintTop_toTopOf="@+id/tv_or" />
        <View
            android:id="@+id/seperator_right"
            android:layout_width="0dp"
            android:layout_height="@dimen/_1dp"
            android:background="@color/colorDividerSearch"
            app:layout_constraintBottom_toBottomOf="@+id/tv_or"
            app:layout_constraintLeft_toRightOf="@+id/tv_or"
            app:layout_constraintRight_toLeftOf="@+id/guideline_right"
            app:layout_constraintTop_toTopOf="@+id/tv_or" />
        <android.support.constraint.Barrier
            android:id="@+id/barrier_seats"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="bottom"
            app:constraint_referenced_ids="tv_or,rv_passengers" />
        <android.support.constraint.Barrier
            android:id="@+id/barrier_select_seats"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="top"
            app:constraint_referenced_ids="tv_or,btn_select_seat" />
        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btn_select_seat"
            style="@style/AppBtnStyleBlueBorderless"
            android:layout_width="0dp"
            android:layout_marginTop="@dimen/_16dp"
            android:text="@string/text_select_seat_for"
            app:layout_constraintBottom_toTopOf="@+id/footer_space"
            app:layout_constraintLeft_toLeftOf="@+id/guideline_left"
            app:layout_constraintRight_toRightOf="@+id/guideline_right" />
        <Space
            android:id="@+id/footer_space"
            android:layout_width="0dp"
            android:layout_height="@dimen/_22dp"
            app:layout_constraintBottom_toBottomOf="parent" />
    </android.support.constraint.ConstraintLayout>
</layout>

注意:

  • 1) 需要修复页脚中的按钮以及其上方的其他内容。上方部分将具有包裹内容的高度。

    2) 底部表格内的内容无法滚动。


我觉得当你在约束布局(constraint layout)中使用<include>时,最好将<include>放在其自己的约束布局中。 - divaPrajapati09
你能否添加在include中的布局代码? - TheLibrarian
2个回答

17

在RecyclerView中使用app:layout_constraintHeight_default="wrap"


1
这解决了我的问题,但最好能有一个简要说明它的作用以及当未设置此属性时为什么0dp无法正常工作。 - artman

0

在 XML 对话框中使用 RelativeLayout


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接