RelativeLayout with wrap_content并与layout_center *问题对齐

时间:2015-12-11 11:44:31

标签: android android-layout android-relativelayout

当我们将RelativeLayout尺寸(宽度或高度)设置为wrap_conent,然后尝试将子视图与另一个居中子视图对齐时,会出现问题。

在下面的示例中,我们有3个RL:

  • 青色和黄色RL具有layout_height="wrap_content"
  • magenta RL with layout_height="100dp"

每个人都有:

  • 红色方块垂直居中(layout_centerVertical="true"
  • 绿色方块,我们尝试alignBottom到红色方块(android:layout_alignBottom="@id/red"
  • 不同长度的文字调整我们的RL

RelativeLayoutIssue

正如您所看到的,第一行的绿色方块位置错误。

类似的情况是横向尺寸和定位。

我知道当我们将其中一个尺寸设置为RelativeLayout时,wrap_content会有一些限制,但我一直认为它仅适用于直接定位到父级的位置:

  

请注意,您不能在RelativeLayout的大小与其子项的位置之间存在循环依赖关系。例如,您不能将RelativeLayout的高度设置为WRAP_CONTENT,将子级设置为ALIGN_PARENT_BOTTOM。

我知道,他们使用嵌套容器很多,但是当我们为列表项创建布局时,它应该尽可能平坦。

我错过了什么吗?

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#0ff">

        <View
            android:id="@+id/red1"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:background="#f00"/>

        <View
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignBottom="@id/red1"
            android:layout_alignRight="@id/red1"
            android:background="#0f0"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/red1"
            android:text="Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta."/>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#f0f">

        <View
            android:id="@+id/red2"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:background="#f00"/>

        <View
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignBottom="@id/red2"
            android:layout_alignRight="@id/red2"
            android:background="#0f0"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/red2"
            android:text="Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta."/>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ff0">

        <View
            android:id="@+id/red3"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_centerVertical="true"
            android:background="#f00"/>

        <View
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignBottom="@id/red3"
            android:layout_alignRight="@id/red3"
            android:background="#0f0"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/red3"
            android:text="Lorem ipsum dolor sit amet enim."/>
    </RelativeLayout>
</LinearLayout>

0 个答案:

没有答案