1. 程式人生 > >android layout gravity和android gravity屬性的區別

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=right10         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