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)
任何人都知道为什么它不起作用?
经过几次测试后,我得出的结论是,将高度设置为wrap_contentinRelativeLayout只是有问题。它无法与未填充布局整个高度的视图正确配合。对于这种视图,RelativeLayout存在垂直居中问题(规则CENTER_VERTICAL或CENTER 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值,并自己控制视图的高度。它使我的布局有点复杂,但只要我控制它,就可以了。