【发布时间】: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