【Android開發入門教程】四.使用者介面之Layout

六星_研鑫發表於2020-07-22

Java精品資料,Java 實戰專案,還有Android開發教程,內含多執行緒,結構,演算法,BATJ面試題等等大牛累積經驗~~~

需要更多資料,可以加入我們Java基礎交流學習基地免費獲取: 925050116 !!!

上一節說到Activity是Android程式的表示層,程式的每一個顯示螢幕就是一個Activity。但是Activity是不能直接顯示在螢幕上的,直接顯示在螢幕上的是Layout檔案中放置的各種View(Button,TextView...)控制元件,學習過.Net開發的就會感覺很像WebForm,Activity相當於頁面的後臺.cs程式碼,而Layout就相當於前臺的.aspx頁面。通常在一個Layout檔案中放置多個控制元件之前,我們需要先定義這個Layout所用的佈局方式,佈局方式的定義在Layouts內包含的控制元件中:

 

這些Layouts佈局控制元件全部繼承於ViewGroup這個抽象類,同時View也繼承於ViewGroup。ViewGroup的功能就是裝載和管理下一層的View物件或ViewGroup物件,也就說它是一個容納其它元素的的容器。ViewGroup中,還定義了一個內部類ViewGroup.LayoutParams。這個類定義了物件的位置、大小等屬性,View透過LayoutParams中的這些屬性值來告訴父級,它們將如何放置。

1.幀佈局 FrameLayout:

FrameLayout是最簡單的佈局物件。在它裡面的的所有顯示物件都將固定在螢幕的左上角,不能指定位置,後一個會直接覆蓋在前一個之上顯示:

 

如圖所示第二個TextView直接覆蓋在了第一個TextView上面。

2.線性佈局 LinearLayout:

LinearLayout是最常用的佈局之一,也是RadioGroup, TabWidget, TableLayout, TableRow, ZoomControls類的父類,它裡面所有顯示的物件都以垂直或水平的方式排列(透過設定LinearLayout的Orentation屬性來設定排列方式):

 

3.相對佈局 RelativeLayout:

RelativeLayout 允許子元素指定它們相對於其父元素或兄弟元素的位置,是實際佈局中最常用的佈局方式之一。它靈活性大、屬性也多,操作難度比較大,屬性之間產生衝突的的可能性也大,使用相對佈局時需要多做測試。

<RelativeLayout xmlns:android="
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:src="@drawable/test" />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/imageView1"
            android:layout_centerHorizontal="true"
            android:text="在imageView1下方"
            android:textSize="15sp" />
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/textView1"
            android:layout_centerHorizontal="true"
            android:text="在testView1下方"
            android:textSize="15sp" />
    </RelativeLayout>


RelativeLayout用到的一些重要的屬性:
第一類:屬性值為true或false
android:layout_centerHrizontal -------------------------------水平居中
android:layout_centerVertical ---------------------------------垂直居中
android:layout_centerInparent --------------------------------相對於父元素完全居中
android:layout_alignParentBottom ----------------------------貼緊父元素的下邊緣
android:layout_alignParentLeft --------------------------------貼緊父元素的左邊緣
android:layout_alignParentRight ------------------------------貼緊父元素的右邊緣
android:layout_alignParentTop --------------------------------貼緊父元素的上邊緣
android:layout_alignWithParentIfMissing ----------------------如果對應的兄弟元素找不到的話就以父元素做參照物
第二類:屬性值必須為id的引用名“@id/id-name”
android:layout_below -----------------------------------------在某元素的下方
android:layout_above ----------------------------------------在某元素的的上方
android:layout_toLeftOf --------------------------------------在某元素的左邊
android:layout_toRightOf -------------------------------------在某元素的右邊
android:layout_alignTop --------------------------------------本元素的上邊緣和某元素的的上邊緣對齊
android:layout_alignLeft --------------------------------------本元素的左邊緣和某元素的的左邊緣對齊
android:layout_alignBottom ----------------------------------本元素的下邊緣和某元素的的下邊緣對齊
android:layout_alignRight -------------------------------------本元素的右邊緣和某元素的的右邊緣對齊
第三類:屬性值為具體的畫素值,如30dip,40px
android:layout_marginBottom --------------------------------離某元素底邊緣的距離
android:layout_marginLeft ------------------------------------離某元素左邊緣的距離
android:layout_marginRight ----------------------------------離某元素右邊緣的距離
android:layout_marginTop ------------------------------------離某元素上邊緣的距離

 4.表格佈局 TableLayout:

TableLayout以行列的形式管理子元素,每一行是一個TableRow佈局物件,當然也可以是普通的View物件,TableRow離每放一個元素就是一列,總列數由列數最多的那一行決定。

<TableLayout xmlns:android="
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="*" >
        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_span="2"
                android:text="第一行合併兩列居中"
                android:textSize="20sp" />
        </TableRow>
        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第一行第一列" />
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第一行第二列" />
        </TableRow>
        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第二行第一列" />
            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="第二行第二列" />
        </TableRow>
    </TableLayout>


android:layout_span="2"是設定該TextView佔據2列(我在介面設計器裡面沒找到TextView的Span屬性,所以是在xml檔案裡面直接新增的),android:stretchColumns="*"是設定該TableLayout的所有列都自動擴充套件,如果不設定自動擴充套件每行列寬會根據顯示的內容改變。

TableLayout的幾個重要屬性:

collapseColumns -----------------------------設定隱藏那些列,列ID從0開始,多個列的話用”,”分隔
stretchColumns ------------------------------設定自動伸展那些列,列ID從0開始,多個列的話用”,”分隔
shrinkColumns -------------------------------設定自動收縮那些列,列ID從0開始,多個列的話用”,”分隔
可以用”*”來表示所有列,同一列可以同時設定為shrinkable和stretchable。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977571/viewspace-2706194/,如需轉載,請註明出處,否則將追究法律責任。

相關文章