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:layout_gravity 只在 LinearLayout 和 FrameLayout 中有效: 

①对于 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


我们来看我们在项目中如何实现下面的这样一个布局:

wKioL1Rsg6yyyQ4XAAAWzK79J9w837.jpg

我们有个一个标题栏,我们可以使用anctionbar来实现

其中+表示添加联系人,通信录要居中

我们如何实现了

假设:我们在外面先定义一个线性布局,水平排列

其中在定义两个线性布局,但是这样我们无法使用

android:layout_gravity="center_horizontal">因为父控件是水平方式的,我们就无法让通信录居中

下面我们如何让通信录居中了,我们可以把最外面的布局定义为相对布局:

代码如下:



    android:layout_width="fill_parent"

    android:layout_height="48dp"

    android:background="#e7e7e7"

    android:layout_gravity="center_horizontal">


       

            android:id="@+id/add"

            android:layout_width="25dp"

            android:layout_height="25dp"

            android:background="@drawable/add1"

            android:layout_marginLeft="20dp"

            android:layout_centerVertical="true"/>


       

            android:layout_width="100dp"

            android:layout_height="fill_parent"

            android:text="通信录"

            android:textColor="#333333"

            android:gravity="center"

            android:textSize="25sp"

            android:layout_centerHorizontal="true"

            />


这样我们可以让添加联系人垂直居中显示,通讯录水平方向居中显示