android:layout_below
是RelativeLayout的一个属性,其官方解释如下:
—Positions the top edge of this view below the given anchor view ID and must be a reference to another resource, in the form "@[+][package:]type:name"
我理解就是:将当前控件的顶部置于给定ID的控件之下,并且两控件应该对齐。然而事实证明我又傻傻的天真了T_T...
layout_blew.xml布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/banner_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true"
android:layout_marginBottom="3dp"
android:layout_marginRight="6dp"
android:includeFontPadding="false"
android:text="东航旗舰店"
android:visibility="visible"
android:textSize="15sp"/>
<TextView
android:id="@+id/seat_space"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/banner_text"
android:layout_toRightOf="@+id/banner_text"
android:includeFontPadding="false"
android:textSize="13sp"
android:visibility="visible"
tools:text="经济舱"/>
<TextView
android:id="@+id/airport_price_fee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seat_space"
android:includeFontPadding="false"
android:textSize="12sp"
tools:text="机建0"/>
</RelativeLayout>
布局的初衷是想在同一个RelativeLayout中将“机建”放在第二栏:
刚开始以“东航旗舰店”为参照,使用属性android:layout_below="@+id/banner_text"
,但由于“东航旗舰店”是动态显示的,有时候VISIBLE,有时候GONE(此时android:layout_below
就找不到参照了,“机建”就会与第一栏重合),要实现正常显示就只能以“经济舱”为参照,使用android:layout_below="@+id/seat_space"
。可是基于对android:layout_below
属性的理解,用了觉得结果会是下面这样的(其实又添加了android:layout_alignLeft
属性才是下面的效果):
结果试了才知道真心错了,android:layout_below="@+id/seat_space"
,只要控件seat_space(经济舱)不设为GONE,也无论“经济舱”位置在哪儿,"机建"都会在“经济舱”的下面一排的最左边(前提是“机建”没有设置其他对齐属性)。
总结:
-
android:layout_below
属性会将当前控件的顶部置于给定ID的控件之下,但并不会与给定ID的控件对齐,默认会放在父控件的最左边; - 可通过
android:layout_alignLeft
、android:layout_alignRight
等对齐属性改变当前控件设置android:layout_below
属性后的默认位置,RelativeLayout的具体其他属性点这里。