Android中常見的佈局和佈局引數

HFW發表於2019-03-18

前言

前幾篇文章複習總結了Android的四大元件,現在開始複習Android中常用的佈局包括以下幾種,先從LinearLayout開始說起

  • LinearLayout
  • RelativeLayout
  • FrameLayout
  • TableLayout
  • AbsoluteLayout
  • ContraintLayout

一、LinearLayout(線性佈局)

LinearLayout是一種將其子View水平單列或者垂直單行進行排列的佈局

線性佈局有以下三個重要的屬性

  • android:orientation取值為vertical或者horizontal,分別表示垂直佈局和水平佈局
  • android:layout_weight權重,應用場景主要有需要按比例分配空間或者填充剩餘空間
  • android:layout_gravity重心,當orientation為vertical時left和right生效,為horizontal時top和bottom生效
  • android:divider分割線圖片,需要配合下面那個屬性
  • android:showDividers顯示分割線的位置四選一,none、begin、end、middle

假設需要實現把一個EditText和Bottom放置於一行並且EditText填充除了Button以外的所有區域,我們可以使用以下程式碼實現

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <EditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="send"/>
</LinearLayout>
複製程式碼

二、RelativeLayout(相對佈局)

RelativeLayout是一種子View能夠描述與其它子View或者父View之間相對關係的佈局

相對佈局有以下幾個重要的屬性

  • android:layout_alignTop 與指定View的頂部對齊
  • android:layout_alignBottom 與指定View的底部對齊
  • android:layout_alignLeft 與指定View的左邊對齊
  • android:layout_alignRight 與指定View的右邊對齊
  • android:layout_alignParentTop 與父View的頂部對齊
  • android:layout_alignParentBottom 與父View的底部對齊
  • android:layout_alignParentLeft 與父View的左邊對齊
  • android:layout_alignParentRight 與父View的頂部對齊
  • android:layout_toLeftOf 當前View的Right與指定View的左邊對齊
  • android:layout_toRightOf 當前View的Left與指定View的右邊對齊
  • android:layout_above 當前View的Bottom與指定View的上面對齊
  • android:layout_alignBaseLine 當前View的文字底部與指定View的文字底部對齊
  • android:layout_centerHorizontal 是否水平居中
  • android:layout_centerVertical 是否垂直居中
  • android:layout_centerInParent 是否水平垂直居中於父View

這裡以列表中的一個Item為例左邊是一張圖片,右邊上面是一個Title,下面是subTitle

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_margin="10dp"
        android:background="@mipmap/ic_launcher"
        android:layout_alignParentLeft="true"/>

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv"
        android:layout_alignTop="@id/iv"
        android:text="我是標題"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above=""
        android:layout_toRightOf="@id/iv"
        android:layout_below="@+id/tv_title"
        android:text="我是子標題"/>

</RelativeLayout>
複製程式碼

三、FrameLayout(幀佈局)

FrameLayout是一種將每個子View當做一幀,層疊顯示的View

該佈局沒有比較特別的屬性,就只是一層層的疊加

四、TableLayout(表格佈局)

TableLayout繼承與LinearLayout,將其子View橫向或者豎向排列,一般子View是TableRow

表格佈局有以下幾個重要的屬性

  • android:collapseColumns 隱藏那幾列,比如0,2表示隱藏第1、3兩列
  • android:stretchColumns 設定哪些列可以被拉伸,如果水平方向還有空餘的空間則拉伸這些列
  • android:shrinkColumns 設定哪些列可以收縮,當水平方向空間不夠時會進行收縮

五、AbsoluteLayout(絕對佈局)

AbsoluteLayout由於無法適配螢幕在API3已經被標為過時了

六、ContraintLayout(約束佈局)

ContraintLayout是一種允許您以靈活的方式定位和調整小部件的佈局

使用該佈局能夠顯著的解決佈局巢狀過多的問題。

相關文章