android菜鳥學習筆記6----android布局(一)

來源:互聯網
上載者:User

標籤:

Android應用的UI組件都是繼承自View類,View類表示的就是一個空白的矩形地區。常用的組件如TextView、Button、EditText等都直接或間接繼承自View。

此外,View還有一個重要的子類ViewGroup,該類可以用來包含多個View組件,本身也可以當做一個View組件被其他的ViewGroup所包含,由此,可以構建出非常複雜的UI介面。

常用的布局管理器如FrameLayout、LinearLayout、RelativeLayout等都直接繼承自ViewGroup。

在Android應用中,Activity就相當於傳統案頭開發中的Form,剛建立出來就是一個空白的螢幕,因此,要顯示UI介面時,就需要調用setContentView()方法傳入要顯示的視圖執行個體或者布局資源。

如:

傳入一個布局資源:

setContentView(R.layout.main);

傳入一個View執行個體:

TextView myTv = new TextView(this);

setContentView(myTv);

myTv.setText(“hello, world”);

因為setContentView()只能接受一個View執行個體,要顯示複雜的UI介面,就需要用到ViewGroup來包含多個多個View執行個體,然後將ViewGroup執行個體傳給setContentView。ViewGroup是個抽象類別,一般直接使用的都是它的子類,被稱之為布局管理器。

Android有兩種方式編寫UI介面,一種是在xml布局資源檔中,另一種是直接在代碼中編寫,如上面的傳入一個View執行個體的做法就是直接在代碼中編寫,這是傳統的Form編程的做法。現在比較推薦的是在xml布局資源檔中編寫UI介面,這樣一來就可以將應用展示層與邏輯層相分離,無需修改代碼就可以修改展示層。

要編寫複雜的UI介面,需要掌握android中常用的布局管理器。主要有:

AbsoluteLayout:絕對布局

FrameLayout:幀布局

LinearLayout:線性布局

RelativeLayout:相對布局

TableLayout:表格版面配置

GridLayou:網格布局(Android 4.0添加的新的布局管理器)

1.LinearLayout 線性布局

線性布局就是放在其中的View組件將進行線性對齊排列,可以設定是垂直排列還是水平排列。

建立一個布局資源檔的方法:

右擊res/layout,然後在彈出的菜單中選擇new,然後選擇Android Xml File,要建立LinearLayout布局檔案,就選擇LinearLayout作為其根節點即可。

linear_layout.xml代碼如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2  3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4  5     android:layout_width="match_parent" 6  7     android:layout_height="match_parent" 8  9     android:orientation="vertical">10 11     <Button12 13         android:layout_width="match_parent"14 15         android:layout_height="wrap_content"16 17         android:text="aaaaaa"18 19         />20 21     <Button22 23         android:layout_width="match_parent"24 25         android:layout_height="wrap_content"26 27         android:text="bbbbbb"28 29         />30 31     <Button32 33         android:layout_width="match_parent"34 35         android:layout_height="wrap_content"36 37         android:text="cccccc"38 39         />40 41     <Button42 43         android:layout_width="match_parent"44 45         android:layout_height="wrap_content"46 47         android:text="dddddd"48 49         />50 51 </LinearLayout>

 

activity中代碼如下:

1 protected void onCreate(Bundle savedInstanceState) {2 3            // TODO Auto-generated method stub4 5            super.onCreate(savedInstanceState);6 7            setContentView(R.layout.linear_layout);8 9 }

 

顯示效果:

 

常用的幾個屬性:

1)orientation屬性:設定LinearLayout中組件的相片順序,可以取值vertical或者horizontal表示垂直排成一列或者水平排成一行。

上面代碼中,如果把orientation設定為horizontal。顯示則變為:

 

因為只顯示一行,而第一個Button的寬度就是充滿父元素,所以只顯示出來了第一個Button。

2)layout_width屬性:設定在父元素中該組件的寬度,可以取值wrap_contentmatch_parent或者fill_parent。其中wrap_content表示寬度能夠包裹該組件中的內容即可,fill_parent和match_parent含義相同表示寬度充滿父元素,現在,更常使用match_parent,而很少用fill_parent。

如上面代碼中把所有的Button的layout_width都設定為wrap_content,則顯示效果如下:

 

3)layout_height屬性:設定在父元素中該組件的寬度,取值同layout_width。

4)grativity屬性:設定該容器內組件的對齊。

如在LinearLayout節點中添加屬性:android:gravity="center_vertical"

則顯示效果如下:

 

該屬性的取值可以是:top、bottom、left、right、center、center_vertical、center_horizontal等值,或者這些值相或(即位或運算 | )

如:android:gravity="bottom|right" 顯示效果

 

5)layout_gravity屬性:當前控制項在父元素的位置。

如將aaaaaa那個Button中layout_gravity設定為”center”,其效果將會與其所處容器即LinearLayout中的gravity屬性效果進行疊加,顯示如下:

 

垂直上進行了置中,水平上還是排在bbbbbb的左邊

6)layout_weight屬性:在子控制項中設定父元素中多出來的額外空間的分配權重。

 

此時,如果只在aaaaaa這個button中設定layout_weight屬性,可以設定為任意值,習慣設定為1。則aaaaaa這個button會展開佔據剩下的空間,顯示如下:

 

如果同時在aaaaaa和dddddd兩個button中都設定layout_weight屬性,且第一個設定為1,第二個設定為2,則之前多出來的剩餘空間會分給aaaaaa 1/3,分給dddddd 2/3,即各自的權重值/總的權重值,即為各自所分得的剩餘空間的比例,顯示如下:

 

7)weightSum屬性:設定容器中剩餘空間的總的權重值,這個屬性是LinearLayout中的屬性,而layout_weight是各個子控制項中的屬性,若不設定,則預設為各個子控制項layout_weight屬性值的總和。

若如上面aaaaaa的layout_weight值為1,dddddd的layout_weight的值為2,同時在LinearLayout中設定weightSum值為6,則仍會有一半的剩餘空間,aaaaaa只分得原來剩餘空間的1/6,dddddd分得2/6,顯示如下:

 

8)visibility屬性:控制是否顯示,取值可以是invisible、visible、gone。visible表示顯示出來,invisible和gone不顯示出來,其中invisible不顯示,但控制項仍然存在,佔用著空間,而gone表示控制項不存在了,也就不佔用空間了。

如:cccccc設定visibility屬性為gone,顯示如下:

 

若改為invisible:

 

LinearLayout設定invisible:

 

2.RelativeLayout:相對布局

顧名思義,即根據各控制項的相對位置進行布局,相對位置,可以是子控制項A相對父控制項的位置,也可以是子控制項A相對於子控制項B的位置。

右擊res/layout,然後在彈出的菜單中選擇new,然後選擇Android Xml File,要建立RelativeLayout布局檔案,就選擇RelativeLayout作為其根節點即可。檔案名稱為relative_layout.xml。

代碼如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2  3 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 4  5     android:layout_width="match_parent" 6  7     android:layout_height="match_parent" > 8  9     <Button10 11         android:id="@+id/aa"12 13         android:layout_width="wrap_content"14 15         android:layout_height="wrap_content"16 17         android:layout_centerInParent="true"18 19         android:text="aaaaaa"20 21        22 23         />24 25     <Button26 27         android:id="@+id/bb"28 29         android:layout_width="wrap_content"30 31         android:layout_height="wrap_content"32 33         android:layout_toRightOf="@id/aa"34 35         android:layout_alignTop="@id/aa"36 37         android:text="bbbbbb"38 39         />40 41     <Button42 43         android:id="@+id/cc"44 45         android:layout_width="wrap_content"46 47         android:layout_height="wrap_content"48 49         android:layout_toLeftOf="@id/aa"50 51         android:layout_alignBottom="@id/aa"52 53         android:text="cccccc"54 55         />56 57     <Button58 59         android:id="@+id/dd"60 61         android:layout_width="wrap_content"62 63         android:layout_height="wrap_content"64 65         android:layout_above="@id/aa"66 67         android:layout_alignLeft="@id/aa"68 69         android:text="dddddd"70 71         />72 73     <Button74 75         android:id="@+id/ee"76 77         android:layout_width="wrap_content"78 79         android:layout_height="wrap_content"80 81         android:layout_below="@id/aa"82 83         android:layout_alignLeft="@id/aa"84 85         android:text="eeeeee"86 87         />88 89 </RelativeLayout>

 

修改FirstActivity中setContentView(R.layout.relative_layout);

顯示效果:

 

aaaaaa在父容器中置中顯示

bbbbbb在aaaaaa的右邊顯示,並且與aaaaaa頂部對齊

ccccccc在aaaaaa的左邊顯示,並且與aaaaaa頂部對齊

dddddd在aaaaaa的上面顯示,並且與aaaaaa靠左對齊

eeeeee在aaaaaa的下面顯示,並且與aaaaaa靠左對齊

主要屬性:均為設定父子相對位置,或者子控制項與子控制項的相對位置

android:layout_toRightOf 在指定控制項的右邊

android:layout_toLeftOf  在指定控制項的左邊

android:layout_above          在指定控制項的上邊

android:layout_below           在指定控制項的下邊

android:layout_alignBaseline  跟指定控制項水平對齊

android:layout_alignLeft  跟指定控制項靠左對齊

android:layout_alignRight 跟指定控制項靠右對齊

android:layout_alignTop  跟指定控制項頂部對齊

android:layout_alignBottom   跟指定控制項底部對齊

android:layout_alignParentLeft     是否跟父布局靠左對齊

android:layout_alignParentTop    是否跟父布局頂部對齊

android:layout_alignParentRight   是否跟父布局靠右對齊

android:layout_alignParentBottom     是否跟父布局底部對齊

android:layout_centerVertical       在父布局中垂直置中

android:layout_centerHorizontal   在父布局中水平置中

android:layout_centerInParent     在父布局中置中

 

android菜鳥學習筆記6----android布局(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.