android 布局中 gravity 和 layout_gravity 属性

gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思。

android:gravity 和 android:layout_gravity 的区别:

android:gravity 是设置该view里面的内容相对于该view的位置,例如设置button里面的text相对于view的靠左,居中等位置。(也可以在Layout布局属性中添加,设置Layout中组件的位置)。

android:layout_gravity 是用来设置该view相对与父view的位置,例如设置button在layout里面的相对位置:屏幕居中,水平居中等。

即android:gravity用于设置View中内容相对于View组件的对齐方式,而android:layout_gravity用于设置View组件相对于Container的对齐方式。说的再直白点,就是android:gravity只对该组件内的东西有效,android:layout_gravity只对组件自身有效。
android:gravity:设置的是控件自身上面的内容位置
android:layout_gravity:设置控件本身相对于父控件的显示位置。


android:layout_gravity 只在 LinearLayout 和 FrameLayout 中有效: 

1、对于 LinearLayout :

当 android:orientation="vertical" (垂直) 时,只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。

当 android:orientation="horizontal" (水平) 时,只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。

2、对于 FrameLayout :
任意android:layout_gravity属性都有效,可以非常方便实现对组件的布局。
看个例子:

整个布局使用了LinearLayout,其中在LinearLayout中添加了android:gravity="center_vertical"属性,使得Button位于屏幕的水平中间。
因为LinearLayout的android:orientation="vertical",所以Button只能使用android:layout_gravity的属性只有三个,即:left,right,center_horizontal,这里使用了android:layout_gravity="right",使得Button靠右边。
然后看Button中的text,Button的width我故意加长了,这样可以清楚看出文字是居于Button的底部和右边,所以Button中android:gravity="right|bottom", 属性是可以多选的,用“|”分开。
<span style="font-family:Microsoft YaHei;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_vertical">
    
    <Button 
        android:layout_width="150px"    
        android:layout_height="wrap_content"   
        android:text="test"    
        android:gravity="right|bottom"
        android:layout_gravity="right"/>

</LinearLayout>
</span>

通过Java代码来设置组件的位置:

setGravity()对应android:gravity

gravity属性对应android:layout_gravity

下面代码实现同上面布局文件实现的效果

<span style="font-family:Microsoft YaHei;">Button button = new Button(this);
button.setText("test");
//设置Button中的文字位置,相当于Button布局属性中的android:gravity="right|bottom"
button.setGravity(Gravity.BOTTOM|Gravity.RIGHT);

LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL); //LinearLayout必须设置方向,否则无法看到效果
//故意加长button长度,这里200的单位是px
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(200, LayoutParams.WRAP_CONTENT);  
//相当于Button布局属性中的android:layout_gravity=right
buttonParams.gravity = Gravity.RIGHT;   
//相当于这两句   button.setLayoutParams(buttonParams);
//               layout.addView(button);
layout.addView(button, buttonParams);  
//设置Button的位置,相当于LinearLayout布局属性中的android:gravity="center_vertical"
layout.setGravity(Gravity.CENTER_VERTICAL);   
         
setContentView(layout);</span>
更多:http://blog.csdn.net/feng88724/article/details/6333809
http://www.cnblogs.com/ghj1976/archive/2011/04/26/2029535.html

欢迎交流 http://blog.csdn.net/ycwol/article/details/43795671

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值