一、介紹:
gravity的中文意思就是”重心“,就是表示view橫向和縱向的停靠位置
(1).android:gravity:是對view控件本身來說的,是用來設置view本身的內容應該顯示在view的什么位置,默認值是左側。也可以用來設置布局中的控件位置
(2).android:layout_gravity:是相對於包含改元素的父元素來說的,設置該元素在父元素的什么位置;
比如TextView: android:layout_gravity表示TextView在界面上的位置,android:gravity表示TextView文本在TextView的什么位置,默認值是左側.
二、使用過程中失效
- android:gravity : 表示當前View,即控件,內部的東西的,對齊方式
- 常見的是:
- TableRow中的Button
- EditText(內部)的文字
- Button(內部)的文字
- android:layout_gravity: 表示當前View,即控件本身,在父一級內的(即父一級控件所給當前子控件所分配的顯示范圍內)的對齊方式
- 常見的是:
- 當前EditText(在父一級LineLayout所分配給其的顯示范圍內)的對齊方式
- 當前的Button(在父一級TableRow所分配給其的顯示范圍內)的對齊方式 ->此處需要注意的是,很多時候,改變Button內的layout_gravity,常看不到改動的效果,是因為其顯示范圍和位置,已經由父一級的TableRow的gravity決定了。
- 下面的代碼是設置button的顯示效果
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <Button 8 android:layout_width="250dp" 9 android:layout_height="wrap_content" 10 android:layout_gravity="right" 11 android:gravity="right" 12 android:text="文字的gravity屬性" /> 13 14 </LinearLayout>
結果如下:

可以看得出來button的位置由於layout_gravity的right屬性位於view的右側,而該button的內容也由於gravity的設置位於了右側。
但是當修改了外層的linearlayout的orientation屬性時:就會發生變化
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="horizontal" > 6 7 <Button 8 android:layout_width="250dp" 9 android:layout_height="wrap_content" 10 android:layout_gravity="right" 11 android:gravity="right" 12 android:text="文字的gravity屬性" /> 13 14 </LinearLayout>

可以看得出來此處android:layout_gravity="right"屬性設置無效。
通過驗證得出來:
(1) 當我們的LinearLayout的orientation的屬性值是horizontal也就是水平方向時:--->我們可以設置控件的layout_gravity屬性值為:豎直方向的變化比如bottom,top,center_vertical。
(2) 當我們的LinearLayout的orientation的屬性值是vertical也就是豎直方向是:--->我們可以設置控件的layout_gravity屬性值為:水平方向的變化比如right,left,center_horizontal。
(3)這個結論表明,layout_gravity屬性時子控件相對於父布局的相對位置,一旦父布局寫死了方向水平或者垂直,在該方向上就只能是默認變化,子控件無法干預,但是在與之相對的方向上子控件可以自由變幻,想想也是可以理解的,老子的方向訂好了,你只能是往前一點或者往后一點,想直接達到終點這不行,但是允許你出去找小朋友玩耍~~~
(4)有一個比較特殊的是center,不管是橫向還是縱向的時候,它總有一個方向起作用
- android:gravity : 表示當前View,即控件,內部的東西的,對齊方式
- 常見的是:
- TableRow中的Button
- EditText(內部)的文字
- Button(內部)的文字
- android:layout_gravity: 表示當前View,即控件本身,在父一級內的(即父一級控件所給當前子控件所分配的顯示范圍內)的對齊方式
- 常見的是:
- 當前EditText(在父一級LineLayout所分配給其的顯示范圍內)的對齊方式
- 當前的Button(在父一級TableRow所分配給其的顯示范圍內)的對齊方式 ->此處需要注意的是,很多時候,改變Button內的layout_gravity,常看不到改動的效果,是因為其顯示范圍和位置,已經由父一級的TableRow的gravity決定了。
