課程1B主要講解了Android UI的ViewGroups(視圖組)、LinearLayout(線性佈局)、RelativeLayout(相對佈局),Portrait Mode(豎屏模式)、Landscape Mode(橫屏模式)以及layout_weight(佈局權重)在UI佈局中的用處。 此外... ...
課程1B
概述
- 課程1B主要講解了Android UI的ViewGroups(視圖組)、LinearLayout(線性佈局)、RelativeLayout(相對佈局),Portrait Mode(豎屏模式)、Landscape Mode(橫屏模式)以及layout_weight(佈局權重)在UI佈局中的用處。
- 此外,本次課程簡要提到了xml命名空間,能夠方便變數名的管理和使用以及避免變數名字衝突。
ViewGroups
- 視圖組控制項引出了parent view、child view以及sibling view的概念;它們分別指的是兩個視圖間的父、子、兄弟關係,是一個相對概念,至少有兩個對象參與。
需要註意的是,也是在1B課程中反覆強調過的,ViewGroups本身也是一種視圖。
LinearLayout
應用線性佈局,首先應當設置佈局中元素的朝向(orientation):具體的取值有vertical、horizontal,分別指定佈局中元素按列排列和按行排列:
android:orientation="vertical"
android:orientation="horizontal"
RelativeLayout
- 相對佈局中的控制項中的預設位置是屏幕的最左上方。
- 相對佈局並不需要android:orientation屬性。
- 相對佈局能夠以指定相對位置的方式來設置佈局中各元素(控制項)之間的相對位置,交給開發者自由定製的空間遠比LinearLayout大,當然相應地也會擁有更多屬性,變得更複雜一些。
- 需要強調,在應用相對佈局進行Android UI設計前,要能夠理解相對佈局中的"相對"在不同的代碼上下文中可能會具有不同的含義。
比如,
1. ”相對“指的是相對於父視圖:
android:layout_alignParentTop=“true”
android:layout_alignParentLeft="true"
android:layout_alignParentRight="false"
android:layout_alignParentBottom="false"
android:layout_centerHorizontal="false"
android:layout_centerVertical="false"
屬性android:layout_centerHorizontal、android:layout_centerVertical也是相對於父視圖的,分別設置控制項位於父視圖的水平居中以及垂直居中的位置。
2. ”相對“指的是相對於錨視圖(anchor view):錨視圖是固定的,其它視圖可以指定與錨視圖的相對位置。
android:layout_toLeftOf=“@id/some_id1_prev_defined”
android:layout_toRightOf=“@id/some_id2_prev_defined”
- [提示1] RelativeLayout的其他參數還有很多,搜索android RelativeLayout layout Params等關鍵字能夠獲取到關於相對佈局的詳細文檔或者API參考手冊。
開發者應該在平時註意鍛煉自己查找資料,解決問題的能力,課程中介紹到的Android Developers就是很好的Android開發的參考網站。
Margin&Padding
- 外邊距(Margin)、內邊距(Padding)的概念在UI設計中很早就出現了。
- Padding控制單個控制項內部元素和該控制項邊界之間的距離。
- 比如說,TextView中的文本與四周邊界的距離的控制:
android:padding="8dp"
或者控制文本與某一邊界之間的距離:
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
- Margin屬性的使用的前提是,必須位於一個視圖組中,否則就沒有“外”邊距的存在了。即外邊距是相對兩個父子(parent-child)控制項之間而言的。
- 用外邊距控制兩個控制項之間的相對位置:
android:layout_margin="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
第一個表達式與後四個的效果是等價,都是設置兩個父子控制項之間的四周的邊距。
- Margin與Padding之間的對比
下麵這張自己畫的圖應該能夠比較清晰地示意二者的區別,藍色方塊是一個ViewGroups控制項,也就是說它是綠色方塊的父視圖(Parent View),
這是外邊距存在的前提。