天天看點

Android-布局管理

Android中有六大布局,分别是: 其中常用的是線性布局和相對布局

  • LinearLayout(線性布局)
  • RelativeLayout(相對布局)
  • TableLayout(表格布局)
  • FrameLayout(幀布局)
  • AbsoluteLayout(絕對布局)
  • GridLayout(網格布局)

一.線性布局

常用設定:

Android-布局管理

分割線有兩種設定方式:

許多界面都會設定一些下劃線,使得界面更加簡潔美觀。

①:直接在布局中添加一個view,這個view的作用僅僅是顯示出一條線

<View  
    android:layout_width="match_parent"  
    android:layout_height="1px"  
    android:background="#000000" /> 
           

這樣是水準方向上的黑線,當然你也可以改成其他顔色,或者使用圖檔

Android-布局管理

②:第二種則是使用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屬性搭配使用

Android-布局管理

1.父容器定位圖

Android-布局管理

2.根據兄弟元件定位

所謂的兄弟元件就是處于同一層次容器的元件

Android-布局管理

注意:圖中的元件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-布局管理

三個常用屬性

  • 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(表格布局) 有點類似,不過他有很多前者沒有的東西,也更加好用,

  • 可以自己設定布局中元件的排列方式
  • 可以自定義網格布局有多少行,多少列
  • 可以直接設定元件位于某行某列
  • 可以設定元件橫跨幾行或者幾列
Android-布局管理

用法歸納

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