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屬性都有效,可以非常方便實現對組件的布局。
看個例子:
整個布局使用了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",
屬性是可以多選的,用“|”分開。
附上布局文件:
<LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:orientation="vertical" android:layout_width= "match_parent" android:layout_height= "match_parent" android:gravity="center_vertical" > <Button android:layout_width="200px" android:layout_height="wrap_content" android:text="內容" android:gravity="right|bottom" android:layout_gravity="right"/> </LinearLayout>
通過Java代碼來設置組件的位置
setGravity()對應android:gravity
gravity屬性對應android:layout_gravity
下面代碼實現同上面布局文件實現的效果
1 LinearLayout layout = new LinearLayout(this); 2 layout.setOrientation(LinearLayout.VERTICAL); //LinearLayout必須設置方向,否則無法看到效果 3 4 Button button = new Button(this); 5 button.setText("內容"); 6 button.setGravity(Gravity.BOTTOM|Gravity.RIGHT); //設置Button中的文字位置,相當於Button布局屬性中的android:gravity="right|bottom" 7 LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(200, LayoutParams.WRAP_CONTENT); 8 //故意加長button長度,這里200的單位是px 9 buttonParams.gravity = Gravity.RIGHT; //相當於Button布局屬性中的android:layout_gravity=right 10 11 layout.addView(button, buttonParams); //相當於這兩句 button.setLayoutParams(buttonParams); 12 // layout.addView(button); 13 14 layout.setGravity(Gravity.CENTER_VERTICAL); //設置Button的位置,相當於LinearLayout布局屬性中的android:gravity="center_vertical" 15 16 setContentView(layout);
虛擬機運行效果圖,跟上面布局文件實現是一樣的

參考:
1. http://blog.csdn.net/feng88724/article/details/6333809
2. http://android.blog.51cto.com/268543/632690
3. http://www.cnblogs.com/ghj1976/archive/2011/04/26/2029535.html
