11

我在包含 Relativelayout 的 Cardview 中编辑 RelativeLayout 时搞砸了!ConstraintLayout 会将相对布局的 wrap_content 更改为 0 并添加工具:layout_editor_absoluteX="10dp" 相对布局内的所有 textview 将折叠 cardview 的右上角!(嵌套 CardView 中的元素与 CardView 之外的元素对齐)

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="357dp"
    android:layout_height="114dp"
    android:layout_margin="5dp"
    app:cardCornerRadius="2dp"
    app:contentPadding="10dp"
    app:cardElevation="10dp"
    tools:layout_editor_absoluteY="36dp"
    app:cardBackgroundColor="@android:color/white"
    tools:layout_editor_absoluteX="11dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="10dp"
        tools:layout_editor_absoluteY="10dp">

        <TextView
            android:text="TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView2"
            tools:text="Location"
            android:textAppearance="@style/TextAppearance.AppCompat.Body2"
            tools:layout_editor_absoluteX="0dp"
            tools:layout_editor_absoluteY="0dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

    </RelativeLayout>

    <ImageView
        android:src="@drawable/ic_hotel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView3"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView3"
        tools:text="Bangalore"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        tools:layout_editor_absoluteX="10dp"
        tools:layout_editor_absoluteY="10dp"
        android:layout_alignBottom="@+id/imageView3"
        android:layout_toRightOf="@+id/textView2"
        android:layout_toEndOf="@+id/textView2" />
</android.support.v7.widget.CardView>

任何关于使用 ConstraintLayout 设计 RelativeLayout 的指南都会非常完整,RelativeLayout 在使用 ConstraintLayout 时不能在任何地方使用?当 CardViews 是 ConstraintLayout 的子代时,在使用 RelativeLayout 时使用 CardView 的子代的指导方针是什么?

4

1 回答 1

24

实际上,这不是问题跟踪器所暗示的:-/

为了澄清这一点,在tools:layout_editor_absolute[X/Y]ConstraintLayout 的任何子项(甚至非直接后代)中插入的属性是 Android Studio 2.2 预览版的错误(我相信它自预览版 3 或 4 以来已修复)。也就是说,除了在场之外,它们实际上什么也没做,因为除了 ConstraintLayout 之外的任何东西都不会对它们做任何事情。

现在,对于 CardView 本身——不需要嵌套的 ConstraintLayout ——CardView 只是一个 FrameLayout,所以如果你想在其中使用 ConstraintLayout,一切正常。

同时,您可以将 CardView 放在 ConstraintLayout 中,这也可以。

问题跟踪器要求的是不同的——它要求在一个层次结构中,ConstraintLayout > CardView > TextView以便对TextView. 但这不是 android 布局系统的工作方式,这就是为什么这个问题作为 WorkingAsIntended 被关闭的原因。

当您在TextView此处添加属性时,负责理解这些属性的布局只能是其直接父级 - 在这种情况下,CardView. 并且CardView不是 的子类ConstraintLayout,它是FrameLayout-- 基本上,它不知道如何处理插入的那些 ConstraintLayout 属性。

你可以做的是一个层次结构,如:

ConstraintLayout > CardView > ConstraintLayout > TextView

然后可以使用约束来定位 TextView,因为它将是 ConstraintLayout 视图组的直接后代。

在此处输入图像描述

于 2016-08-12T16:32:20.267 回答