【问题标题】:ConstraintLayout is gone when the width is set to "match_constraint"当宽度设置为“match_constraint”时,ConstraintLayout 消失
【发布时间】:2018-02-02 20:45:05
【问题描述】:

我正在用三个ConstraintLayouts 制作CardView。一个ConstraintLayout 包裹着两个并排的ConstraintLayout。 问题是如果宽度设置为match_constraint,右侧的ConstraintLayout 就会消失。在Android Studio 中似乎很好,但是当我在手机上运行它时它就消失了。我假设“match_constraint”的原因将宽度设​​置为 0dp。我希望右侧约束根据手机动态更改宽度。 以下是我的布局 XML 文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="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.support.v7.widget.CardView
        android:id="@+id/cv_result_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:padding="8dp"
        card_view:cardBackgroundColor="#eee"
        card_view:cardCornerRadius="5dp">

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

            <android.support.constraint.ConstraintLayout
                android:id="@+id/cl_left-panel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginStart="8dp"
                android:layout_marginTop="8dp"
                android:background="@color/blank_color"
                card_view:layout_constraintBottom_toBottomOf="parent"
                card_view:layout_constraintStart_toStartOf="parent"
                card_view:layout_constraintTop_toTopOf="parent">

                <ImageView
                    android:id="@+id/iv_result_quiz_detail"
                    android:layout_width="140dp"
                    android:layout_height="115dp"
                    android:layout_margin="4dp"
                    android:contentDescription="@string/iv_result_quiz_detail"
                    card_view:layout_constraintEnd_toEndOf="parent"
                    card_view:layout_constraintTop_toTopOf="parent"
                    card_view:srcCompat="@mipmap/ic_launcher" />

                <TextView
                    android:id="@+id/tv_no_of_likes"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/iv_result_quiz_detail"
                    android:layout_marginStart="4dp"
                    android:layout_marginTop="4dp"
                    android:layout_toEndOf="@+id/chb_like"
                    android:gravity="top"
                    android:text="@string/tv_no_of_likes"
                    android:textSize="12sp"
                    android:textStyle="italic"
                    card_view:layout_constraintStart_toEndOf="@+id/chb_like"
                    card_view:layout_constraintTop_toBottomOf="@+id/iv_result_quiz_detail" />

                <CheckBox
                    android:id="@+id/chb_like"
                    android:layout_width="17dp"
                    android:layout_height="17dp"
                    android:layout_below="@+id/iv_result_quiz_detail"
                    android:layout_margin="4dp"
                    android:layout_marginBottom="8dp"
                    android:layout_marginTop="8dp"
                    android:background="@drawable/selector_like"
                    android:button="@null"
                    android:contentDescription="@string/ib_like"
                    android:scaleType="fitXY"
                    card_view:layout_constraintBottom_toBottomOf="parent"
                    card_view:layout_constraintStart_toStartOf="@+id/iv_result_quiz_detail"
                    card_view:layout_constraintTop_toBottomOf="@+id/iv_result_quiz_detail" />
            </android.support.constraint.ConstraintLayout>

            <android.support.constraint.ConstraintLayout
                android:id="@+id/cl_right_panel"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginEnd="8dp"
                android:layout_marginStart="8dp"
                android:background="@color/blank_color"
                card_view:layout_constraintBottom_toBottomOf="@+id/cl_left-panel"
                card_view:layout_constraintEnd_toEndOf="parent"
                card_view:layout_constraintStart_toEndOf="@+id/cl_left-panel"
                card_view:layout_constraintTop_toTopOf="@+id/cl_left-panel">

                <TextView
                    android:id="@+id/tv_quiz_desc"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="16dp"
                    android:maxLines="2"
                    android:text="@string/test_question"
                    android:textSize="12sp"
                    android:textStyle="bold"
                    card_view:layout_constraintStart_toStartOf="parent"
                    card_view:layout_constraintTop_toTopOf="parent" />

                <TextView
                    android:id="@+id/tv_choice_01"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_quiz_desc"
                    android:layout_marginStart="4dp"
                    android:layout_marginTop="8dp"
                    android:background="@drawable/shape_round_button_mint"
                    android:ellipsize="end"
                    android:gravity="start"
                    android:maxLines="1"
                    android:text="@string/test_choice"
                    android:textSize="12sp"
                    card_view:layout_constraintStart_toStartOf="@+id/tv_quiz_desc"
                    card_view:layout_constraintTop_toBottomOf="@+id/tv_quiz_desc" />

                <TextView
                    android:id="@+id/tv_choice_02"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_choice_01"
                    android:layout_marginStart="4dp"
                    android:layout_marginTop="4dp"
                    android:ellipsize="end"
                    android:gravity="start"
                    android:maxLines="1"
                    android:text="@string/test_choice"
                    android:textSize="12sp"
                    card_view:layout_constraintStart_toStartOf="@+id/tv_quiz_desc"
                    card_view:layout_constraintTop_toBottomOf="@+id/tv_choice_01" />

                <TextView
                    android:id="@+id/tv_choice_03"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_choice_02"
                    android:layout_marginStart="4dp"
                    android:layout_marginTop="4dp"
                    android:ellipsize="end"
                    android:gravity="start"
                    android:maxLines="1"
                    android:text="@string/test_choice"
                    android:textSize="12sp"
                    card_view:layout_constraintStart_toStartOf="@+id/tv_quiz_desc"
                    card_view:layout_constraintTop_toBottomOf="@+id/tv_choice_02" />

                <TextView
                    android:id="@+id/tv_choice_04"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tv_choice_03"
                    android:layout_marginStart="4dp"
                    android:layout_marginTop="4dp"
                    android:ellipsize="end"
                    android:gravity="start"
                    android:maxLines="1"
                    android:text="@string/test_choice"
                    android:textSize="12sp"
                    card_view:layout_constraintStart_toStartOf="@+id/tv_quiz_desc"
                    card_view:layout_constraintTop_toBottomOf="@+id/tv_choice_03" />
            </android.support.constraint.ConstraintLayout>

        </android.support.constraint.ConstraintLayout>

    </android.support.v7.widget.CardView>
</LinearLayout>

我的预期是这样的

【问题讨论】:

  • 你能不能把你想要实现的设计截图。
  • 事实上你根本不需要 3 ConstraintLayouts。您只需要一个包含两个ConstraintLayouts 的LinearLayout(垂直或水平)。请记住,ConstraintLayout 不是免费的,因此标准布局很可能是在具有浅层视图层次结构时更好的选择。
  • @RachitMishra 我添加了我期望的图像链接。谢谢。
  • @azizbekian 感谢您的评论。我认为我需要三个,因为并排 ConstraintLayout 需要包含在包装器中以使两个布局更改宽度。请让我知道是否有另一种方法可以在没有 ConstraintLayout 包装器的情况下并排更改宽度。谢谢。
  • 嗨!解决了吗?

标签: android android-constraintlayout


【解决方案1】:

也许您的第一个 ConstraintLayout(具有固定宽度)占据了整个屏幕。
尝试使用layout_constraintHorizontal_weight 来确定每个布局占据的屏幕部分。

左侧布局:

    <android.support.constraint.ConstraintLayout
        android:id="@+id/cl_left-panel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:background="@color/blank_color"
        card_view:layout_constraintBottom_toBottomOf="parent"
        card_view:layout_constraintEnd_toStartOf="@id/cl_right_panel"
        card_view:layout_constraintHorizontal_weight="1"
        card_view:layout_constraintStart_toStartOf="parent"
        card_view:layout_constraintTop_toTopOf="parent">

正确的布局:

    <android.support.constraint.ConstraintLayout
        android:id="@+id/cl_right_panel"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:background="@color/blank_color"
        card_view:layout_constraintBottom_toBottomOf="@+id/cl_left-panel"
        card_view:layout_constraintEnd_toEndOf="parent"
        card_view:layout_constraintHorizontal_weight="1.5"
        card_view:layout_constraintStart_toEndOf="@+id/cl_left-panel"
        card_view:layout_constraintTop_toTopOf="@+id/cl_left-panel">

注意:您不需要根LinearLayout

【讨论】:

  • 感谢您的回答。但是,它不起作用。顺便说一句,我删除了根“LinearLayout”。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2022-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多