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
我們來看我們在項目中如何實現下面的這樣一個佈局:
我們有個一個標題欄,我們可以使用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>
這樣我們可以讓添加聯繫人垂直居中顯示,通訊錄水平方向居中顯示