Android中有六大布局,分别是: 其中常用的是線性布局和相對布局
- LinearLayout(線性布局)
- RelativeLayout(相對布局)
- TableLayout(表格布局)
- FrameLayout(幀布局)
- AbsoluteLayout(絕對布局)
- GridLayout(網格布局)
一.線性布局
常用設定:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSP4cVWrRWbihGdHJWQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLjBTYiNDMmJzYiVDZwQWO4EWNyQjMmNmYxkDM2UzY0gzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
分割線有兩種設定方式:
許多界面都會設定一些下劃線,使得界面更加簡潔美觀。
①:直接在布局中添加一個view,這個view的作用僅僅是顯示出一條線
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#000000" />
這樣是水準方向上的黑線,當然你也可以改成其他顔色,或者使用圖檔
②:第二種則是使用LinearLayout的一個divider屬性,直接為LinearLayout設定分割線 這裡就需要你自己準備一張線的圖檔了
- android:divider設定作為分割線的圖檔
- android:showDividers設定分割線的位置,none(無),beginning(開始),end(結束),middle(每兩個元件間
- dividerPadding設定分割線的Padding
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/ktv_line_div" <!--設定分割線的圖檔-->
android:orientation="vertical"
android:showDividers="middle" <!--元件之間設定分割線-->
android:dividerPadding="10dp" <!--設定分割線的Padding-->
tools:context="com.jay.example.linearlayoutdemo.MainActivity" >
使用linearlayout布局時:
android:orientation=“vertical” 時, 隻有水準方向的設定才起作用,垂直方向的設定不起作用。 即:left,right,center_horizontal 是生效的。
android:orientation=“horizontal” 時, 隻有垂直方向的設定才起作用,水準方向的設定不起作用。 即:top,bottom,center_vertical 是生效的。
二.相對布局
RelativeLayout,以父容器或者兄弟元件參考+margin +padding就可以設定元件的顯示位置,是比較友善的。因為使用LinearLayout的時候有一個問題,就是當界面比較複雜的時候,需要嵌套多層的 LinearLayout,這樣就會降低UI Render的效率(渲染速度),而且如果是listview或者GridView上的 item,效率會更低,另外太多層LinearLayout嵌套會占用更多的系統資源,還有可能引發stackoverflow。
總結就是:盡量使用RelativeLayout + LinearLayout的weight屬性搭配使用
1.父容器定位圖
2.根據兄弟元件定位
所謂的兄弟元件就是處于同一層次容器的元件
注意:圖中的元件1,2就是兄弟元件了,而元件3與元件1或元件2并不是兄弟元件,是以元件3不能通過 元件1或2來進行定位,比如layout_toleftof = “元件1”,這樣會報錯。
3.margin與padding
margin代表的是偏移,比如marginleft = "5dp"表示元件離容器左邊緣偏移5dp;
padding代表的則是填充,而填充的對象針對的是元件中的元素,比如TextView中的文字 比如為TextView設定paddingleft = “5dp”,則是在元件裡的元素的左邊填充5dp的空間!
margin針對的是容器中的元件,而padding針對的是元件中的元素
三.表格布局
三個常用屬性
- android:collapseColumns:設定需要被隐藏的列的序号
- android:shrinkColumns:設定允許被收縮的列的列序号
- android:stretchColumns:設定運作被拉伸的列的列序号
以上這三個屬性的列号都是從0開始算的,比如shrinkColunmns = “2”,對應的是第三列!
可以設定多個,用逗号隔開比如"0,2",如果是所有列都生效,則用"*"号即可
除了這三個常用屬性,還有兩個屬性,分别就是跳格子以及合并單元格,這和HTML中的Table類似:
android:layout_column=“2”:表示的就是跳過第二個,直接顯示到第三個格子處,從1開始算的!
android:layout_span=“4”:表示合并4個單元格,也就說這個元件占4個單元格
四.幀布局
FrameLayout(幀布局)可以說是六大布局中最為簡單的一個布局,這個布局直接在螢幕上開辟出一塊空白的區域,當我們往裡面添加控件的時候,會預設把他們放到這塊區域的左上角,而這種布局方式卻沒有任何的定位方式,是以它應用的場景并不多;幀布局的大小由控件中最大的子控件決定,如果控件的大小一樣大的話,那麼同一時刻就隻能看到最上面的那個元件!後續添加的控件會覆寫前一個!雖然預設會将控件放置在左上角,但是我們也可以通過layout_gravity屬性,指定到其他的位置!
常用屬性
FrameLayout的屬性很少就兩個
前景圖像:永遠處于幀布局最上面,直接面對使用者的圖像,就是不會被覆寫的圖檔。
兩個屬性:
- android:foreground:*設定改幀布局容器的前景圖像
- android:foregroundGravity:設定前景圖像顯示的位置
五.網格布局
網格布局gridlayout 是Android 4.0以後引入的一個新的布局,和前面所學的TableLayout(表格布局) 有點類似,不過他有很多前者沒有的東西,也更加好用,
- 可以自己設定布局中元件的排列方式
- 可以自定義網格布局有多少行,多少列
- 可以直接設定元件位于某行某列
- 可以設定元件橫跨幾行或者幾列
用法歸納
GridLayout使用虛細線将布局劃分為行,列和單元格,同時也支援在行,列上進行交錯排列 ②使用流程:
step 1:先定義元件的對其方式 android:orientation 水準或者豎直,設定多少行與多少列
step 2:設定元件所在的行或者列,記得是從0開始算的,不設定預設每個元件占一行一列
step 3:設定元件橫跨幾行或者幾列;設定完畢後,需要在設定一個填充:android:layout_gravity = “fill”
六.絕對布局
使用很少:
AbsoluteLayout布局的, 相信大部分學過Java的都知道,我們在Java swing(不是spring哦)都用過這個絕對布局,但是Android 中我們用這個少的原因,就是因為我們開發的應用需要在很多的機型上面進行一個适配,如果你 使用了這個絕對布局的話,可能你在4寸的手機上是顯示正常的,而換成5寸的手機,就可能出現偏移 和變形,是以的話,這個還是不建議使用了
詳細教程請通路:https://www.runoob.com/w3cnote/android-tutorial-absolutelayout.html