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只对组件自身有效
①对于 LinearLayout :
当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。
当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。
②对于 FrameLayout :
任意android:layout_gravity属性都有效,可以非常方便实现对组件的布局。
http://blog.csdn.net/dyllove98/article/details/8842318
我们来看我们在项目中如何实现下面的这样一个布局:
我们有个一个标题栏,我们可以使用anctionbar来实现
其中+表示添加联系人,通信录要居中
我们如何实现了
假设:我们在外面先定义一个线性布局,水平排列
其中在定义两个线性布局,但是这样我们无法使用
android:layout_gravity="center_horizontal">因为父控件是水平方式的,我们就无法让通信录居中
下面我们如何让通信录居中了,我们可以把最外面的布局定义为相对布局:
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="48dp"
android:background="#e7e7e7"
android:layout_gravity="center_horizontal">
<ImageView
android:id="@+id/add"
android:layout_width="25dp"
android:layout_height="25dp"
android:background="@drawable/add1"
android:layout_marginLeft="20dp"
android:layout_centerVertical="true"/>
<TextView
android:layout_width="100dp"
android:layout_height="fill_parent"
android:text="通信录"
android:textColor="#333333"
android:gravity="center"
android:textSize="25sp"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
这样我们可以让添加联系人垂直居中显示,通讯录水平方向居中显示