android:gravity=“bottom|center_horizontal“的妙用

  今天,在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是有局限的。

猜你喜欢

转载自blog.csdn.net/zhangjin1120/article/details/52411898