android:layout_gravity和android:gravity屬性的區別


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM