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是有局限的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangjin1120

可靠的文章费时费力,希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值