今天,在java SE课堂上,老师讲逻辑或“|”表示:左侧条件成立,也会继续执行右侧条件。例如:
int x=5;
if((x>1)|(x/0==1)){ //即使左侧的x>1成立,x/0也会继续执行,所以会抛异常
reture ture;
}
这让我联想到Android布局中常见的
android:gravity="bottom|center_horizontal"
并不是“或”的意思,但是和逻辑或相同的是,两边的条件都要执行。在这个语句中 | 不表示或,而是多选。即gravity的属性是可以多选的。gravity是LinearLayout的一个属性。
例如, 我们经常想在一个垂直排列的布局中,使button位于底部并且居中,如下图:
如果你不知道bottom和center_horizontal可以同时设置,你就只能在LinearLayout中设置宽度全屏,android:gravity="bottom",然后在button里设置android:layout_gravity="center_horizontal", 才能实现效果。代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:textSize="30sp"
android:text="确定" />
</LinearLayout>
但是,如果你知道 android:gravity="bottom|center_horizontal",那就简单多了,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom|center_horizontal"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="200dp"
android:layout_height="100dp"
android:text="确定"
android:textSize="30sp" />
</LinearLayout>
与之相似的layout_gravity也是可以多选的。但是layout_gravity有局限,假如LinearLayout 的orientation设定为垂直,那么Button 的layout_gravity中的属性,就只有水平方向上的left,right,center_horizontal起效,垂直方向上的top,bottom,center_vertical都不起效,这个原因在《第一行代码 第2版》的第96页有介绍,大致意思就是垂直方向上的距离是变化的。我们不可能同时选top|center_vertical,靠上又垂直居中这是矛盾的。所以,layout_gravity中“|”几乎不用,比起gravity,layout_gravity是有局限的。