在相对布局中设置 minHeight,禁用 alignBaseline?

Bar*_*ski 5 android android-layout android-relativelayout

我的RelativeLayout应该看起来更不像这样:

+----------------------------------------------+
|                                              |
|                                              |
|+----------------+          +----------------+|
||                |+--------+|                ||
||     View 1     || View 2 ||     View 3     ||
|+----------------++--------++----------------+|
|                                              |
|                                              |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

当我的相对布局具有固定高度(例如 80dp)时,我完美地实现了它。不幸的是,我需要它android:layout_height="wrap_content"android:minHeightset 一起使用(例如那些 80dp)。当我以这种方式更改布局时,android:layout_alignBaseline似乎不适用于 View2,并且我得到了类似的信息:

+----------------------------------------------+
|                                              |
|                  +--------+                  |
|+----------------+| View 2 |+----------------+|
||                |+--------+|                ||
||     View 1     |          |     View 3     ||
|+----------------+          +----------------+|
|                                              |
|                                              |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我的 xml 看起来像这样:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="80dp" >

    <TextView
        android:id="@+id/View1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/View2"
        android:gravity="center"
        android:text="View1" />

    <TextView
        android:id="@+id/View2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/View1"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:text="View2" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/View2"
        android:gravity="center"
        android:text="View3" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么它不起作用?

Bar*_*ski 2

经过几次测试后,我得出的结论是,将高度设置为wrap_contentinRelativeLayout只是有问题。它无法与未填充布局整个高度的视图正确配合。对于这种视图,RelativeLayout存在垂直居中问题(规则CENTER_VERTICALCENTER IN PARENT)。基本上,应该垂直居中的视图将按原样显示,但布局本身将“看到”它们(出于设置其他规则的目的)顶部对齐。

因此,将任何规则设置为依赖于那些“布局错误感知”视图的位置,将导致视图以意想不到的方式显示。

如果你考虑到这一点,我的案例就很容易解释了。这是视图的显示方式:

+----------------------------------------------+
|                                              |
|                  +--------+                  |
|+----------------+| View 2 |+----------------+|
||                |+--------+|                ||
||     View 1     |          |     View 3     ||
|+----------------+          +----------------+|
|                                              |
|                                              |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

这就是RelativeLayout他们“感知”的方式:

+----------------------------------------------+
|+----------------+          +----------------+|
||                |+--------+|                ||
||     View 1     || View 2 ||     View 3     ||
|+----------------++--------++----------------+|
|                                              |
|                                              |
|                                              |
|                                              |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

两张图片中 View 2 的位置相同)。

由于我需要我的布局为RelativeLayout,为了解决这个问题,我决定完全放弃使用wrap_content值,并自己控制视图的高度。它使我的布局有点复杂,但只要我控制它,就可以了。