A. android Studio 中的布局
在Android Studio中的布局共有6種布局(已知):
只能在LinearLayout中實現,
父類添加orientation屬性(horizontal水平排列 | Vertical垂直排序),
在子類中添加權重layout_weight 數字越大,佔比越大。
相對於父容器 (居中):水平居中android:layout_centerHorizontal
敬茄 完全居中android:layout_centerInParent
敗清 垂直居中android:layout_centerVertical
對齊:與父容器左邊界對齊:android:layout alignParentLeft
與父容器右邊界對齊:android:layout alignParentRight
與父容器的頂部對齊android:layout_alignParentTop
與父容器的底部對齊android:layout_alignParentBottom
相對於兄弟視圖控制項: (位置): 顯示在ID為but_id的左側android:layout_toLeftOf
顯示在ID為but_id的右側android:layout_toRightOf
顯示在ID為but_id的上方android:layout_above
亮枯察 顯示在ID為but_id的下方android:layout_below
對齊: 與ID為but_id的左側對齊android:layout_alignLeft
與ID為but_id的右側對齊android:layout_alignRight
與ID為but_id的頂部對齊android:layout_alignTop
與ID為but_id的底部對齊android:layout_alignBottom
3、絕對布局
只能在AbsoluteLayout中使用,再要操作的類中使用android:layout_y,android:layout_x
4、幀布局
只能在FrameLayout中使用,使用 View(並列),可以大套小
5、表格布局
在TableLayout類中使用TableRow(行),Button(格)在其TableRow(行)中。
6、網格布局
在GridLayout類中使用Button直接寫入,
在類屬性中添加android:rowCount="5"(5行),或android:columnCount="4"(4列)
在常見的網頁中大部分為線性布局
B. android中五種布局有什麼不同
五種布局方式,分別是:FrameLayout(框架布
局),LinearLayout
(線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)
一、FrameLayout
這個布局可以看成是牆腳堆東西,有一個四方的矩形的左上角牆腳,我們放了第一個東西,要再放一個,那就在放在原來放的位置的上面,這樣依次的放,會蓋住原來的東西。這個布局比較簡單,也只能放一點比較簡單的東西。
二、LinearLayout
線性布局,這個東西,從外框上可以理解為一個div,他首先是一個一個從上往下羅列在屏幕上。每一個LinearLayout裡面又可分為垂直布局
(android:orientation="vertical")和水平布局(android:orientation="horizontal"
)。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。
linearLayout中有一個重要的屬性 android:layout_weight="1",這個weight在垂直布局時,代錶行距;水平的時候代表列寬;weight值越大就越大。
三、AbsoluteLayout
絕對布局猶如div指定了absolute屬性,用X,Y坐標來指定元素的位置android:layout_x="20px"
android:layout_y="12px" 這種布局方式也比較簡單,但是在垂直隨便切換時,往往會出問題,而且多個元素的時候,計算比較麻煩。
四、RelativeLayout
相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:
相對於某一個元素
android:layout_below="@id/aaa" 該元素在 id為aaa的下面
android:layout_toLeftOf="@id/bbb" 改元素的左邊是bbb
相對於父元素的地方
android:layout_alignParentLeft="true" 在父元素左對齊
android:layout_alignParentRight="true" 在父元素右對齊
還可以指定邊距等,具體詳見API
五。TableLayout
表格布局類似Html裡面的Table。每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素,設定他的對齊方式 android:gravity="" 。
每一個布局都有自己適合的方式,另外,這五個布局元素可以相互嵌套應用,做出美觀的界面。-----------------cvsyun。
C. android設計界面時控制項有多種排列方法,其中常用布局方式有
在android中我們常用的布局方式有這么幾種:LinearLayout (線性布局),RelativeLayout (相對布局),TableLayout (表格布局),AbsoluteLayout (絕對布局),FrameLayout (幀布局)。LinearLayout 和 RelativeLayout 應該又是其中用的較多的兩種。AbsoluteLayout 比較少用(我自己還沒用過),因為它是按屏幕的絕對位置來布局的如果屏幕大小發生改變的話控制項的位置也發生了改變。這個就相當於HTML中的絕對布局一樣,一般不推薦使用。LinearLayout 顧名思義就是一條條的將控制項布置下去,線性布局分為水平線性和垂直線性二者的屬性分別為
android:orientation="horizontal" android:orientation="vertical" 。xmlns:android="http://schemas.android.com/apk/res/android" 很多人對這個感到困惑,其實它就是一個命名空間。RelativeLayout 相對布局。裡面的每個控制項之間的關系都是相對的。如果不設置相對關系的話默認擺放在屏幕左上角。重要屬性如下:
android:layout_toRightOf="@id/city" :與id為city的控制項的右邊對齊。
android:layout_alignTop="@id/city" : 與id為city的控制項的頂部對齊。
給出示意圖如下所示:
android:layout_width="fill_parent" android:layout_height="wrap_content" 我一般在線性布局裡面套相對布局,這時候需要注意上面兩個屬性相對布局的寬度可以設置為填充父控制項,但是高度一般不要設置為填充父控制項因為這樣的話我想在相對布局外面在放控制項就沒有效果了因為屏幕已經被相對布局全部占據。
不管是用什麼布局,寬度與高度這兩個屬性一定要弄清楚剛開始的時候我經常會發現有些控制項沒顯示在界面上或者占據了整個屏幕,一檢查原來是這里設置錯了。還有不要忘記這兩個屬性在一般控制項中都是不可或缺的,忘記設置的話就會報錯。
D. android中有幾種布局技術,各自優缺點
在4.0以前版本中一共有五種布局,都是ViewGroup的子類。分別是AbsoluteLayout、RelativeLayout、LinearLayout、FrameLayout、TableLayout。而TableLayout是LinearLayout的子類。(中文分別是:絕對布局、相對布局、線性布局念弊敏、幀布局、表格布局)。
在2.2作業系統中將AbsoluteLayout過期。而目前FrameLayout、TableLayout也逐漸少用。
在4.0之後又新增GridLayout。(GridLayout最經典的案例是計算器介面)
總之,Android中一共有六種布局。目前推薦使用RelativeLayout、LinearLayout、GridLayout三種布局。
一般簡單的布局就用LinearLayout,復雜點的用RelativeLayout(可以防止多層巢狀),像FrameLayout,裡面的控制元件是重疊的,AbsoluteLayout裡面控制元件位置是絕對的,在螢幕適配方面就不行了。
xml布局簡單,推薦使用;程式碼布局可以實現更豐富的功能。
具體使用根據你自己專案的需求來選擇。
RAID是「Rendant Array of Independent Disk」的縮寫,中文意思是獨立冗餘磁碟陣列。
主要包含RAID 0~RAID 7等數個規范,它們的側重點各不相同,常見的規范有如下幾種:
RAID 0:無差錯控制的帶區組
要實現RAID0必須要有兩個以上硬碟驅動器,RAID0實現了帶區組,資料並不是儲存在一個硬碟上,而是分成資料塊儲存在不同驅動器上。因為將資料分布在不同驅動器上,所以資料吞吐率大大提高,驅動器的負載也比較平衡。如果剛好所需要的資料在不同的驅動器上效率最好。它不需要計算校驗碼,實現容易。它的缺點是它沒有資料差錯控制,如果一個驅動器中的資料發生錯誤,即使其它盤上的資料正確也無濟於事了。不應該將它用於對資料穩定性要求高的場合。如果使用者進卜派行圖象(包括動畫)編輯和其它要求傳輸比較大的場合使用RAID0比較合適。同時,RAID可以提高資料傳輸速率,比如所需讀取的檔案分布在兩個硬碟上,這兩個硬碟可以同時讀取。那麼原來讀取同樣檔案的時間被縮短為1/2。在所有的級別中,RAID 0的速度是最快的。但是RAID 0沒有冗餘功能的,如果一個磁碟(物理)損壞,則所有的資料都無法使用。
RAID 1:鏡象結構
raid1對於使用這種RAID1結構的裝置來說,RAID控制器必須能夠同時對兩個盤進行讀操作和對兩個鏡象盤進行寫操作。通過下面的結構圖您也可以看到必須有兩個驅動器。因為是鏡象結構在一組盤出現問題時,可以使用鏡象,提高系統的容錯能力。它比較容易設計和實現。每讀一次盤只能讀出一塊資料,也就是說資料塊傳送速率與單獨的盤的讀取速率相同。因為RAID1的校驗十分完備,因此對系統的處理能力有很大的影響,通常的RAID功能由軟體實現,而這樣的實現方法在伺服器負載比較重的時候會大大影響伺服器效率。當您的系統需要極高的可靠性時,如進行資料統計,那麼使用RAID1比較合適。而且RAID1技術支援「熱替換」,即不斷電的情況下對故障磁碟進行更換,更換完畢只要從映象盤上恢復資料即可。當主仔枝硬碟損壞時,映象硬碟就可以代替主硬碟工作。映象硬碟相當於一個備份盤,可想而知,這種硬碟模式的安全性是非常高的,RAID 1的資料安全性在所有的RAID級別上來說是最好的。但是其磁碟的利用率卻只有50%,是所有RAID級別中最低的。
RAID2:帶海明碼校驗
從概念上講,RAID 2 同RAID 3類似,兩者都是將資料條塊化分布於不同的硬碟上, 條塊單位為位或字 節。然而RAID 2 使用一定的編碼技術來提供錯誤檢查及恢復。這種編碼技術需要多個磁碟存放檢查及恢復資訊,使得RAID 2技術實施更復雜。因此,在商業環境中很少使用。下圖右邊的各個磁碟上是資料的各個位,由一個數據不同的位運算得到的海明校驗碼可以儲存另一組磁碟上,具體情況請見下圖。由於海明碼的特點,它可以在資料發生錯誤的情況下將錯誤校正,以保證輸出的正確。它的資料傳送速率相當高,如果希望達到比較理想的速度,那最好提高儲存校驗碼ECC碼的硬碟,對於控制器的設計來說,它又比RAID3,4或5要簡單。沒有免費的午餐,這里也一樣,要利用海明碼,必須要付出資料冗餘的代價。輸出資料的速率與驅動器組中速度最慢的相等。
RAID3:帶奇偶校驗碼的並行傳送
raid3這種校驗碼與RAID2不同,只能查錯不能糾錯。它訪問資料時一次處理一個帶區,這樣可以提高讀取和寫入速度,它像RAID 0一樣以並行的方式來存放資料,但速度沒有RAID 0快。校驗碼在寫入資料時產生並儲存在另一個磁碟上。需要實現時使用者必須要有三個以上的驅動器,寫入速率與讀出速率都很高,因為校驗位比較少,因此計算時間相對而言比較少。用軟體實現RAID控制將是十分困難的,控制器的實現也不是很容易。它主要用於圖形(包括動畫)等要求吞吐率比較高的場合。不同於RAID 2,RAID 3使用單塊磁碟存放奇偶校驗資訊。如果一塊磁碟失效,奇偶盤及其他資料盤可以重新產生資料。如果奇偶盤失效,則不影響資料使用。RAID 3對於大量的連續資料可提供很好的傳輸率,但對於隨機資料,奇偶盤會成為寫操作的瓶頸。利用單獨的校驗盤來保護資料雖然沒有映象的安全性高,但是硬碟利用率得到了很大的提高,為(n-1)/n。
RAID4:帶奇偶校驗碼的獨立磁碟結構
raid4RAID4和RAID3很像,不同的是,它對資料的訪問是按資料塊進行的,也就是按磁碟進行的,每次是一個盤。在圖上可以這么看,RAID3是一次一橫條,而RAID4一次一豎條。它的特點和RAID3也挺像,不過在失敗恢復時,它的難度可要比RAID3大得多了,控制器的設計難度也要大許多,而且訪問資料的效率不怎麼好。
RAID5:分散式奇偶校驗的獨立磁碟結構
RAID5清晰圖片從它的示意圖上可以看到,它的奇偶校驗碼存在於所有磁碟上,其中的p0代表第0帶區的奇偶校驗值,其它的意思也相同。RAID5的讀出效率很高,寫入效率一般,塊式的集體訪問效率不錯。因為奇偶校驗碼在不同的磁碟上,所以提高了可靠性,允許單個磁碟出錯。RAID 5也是以資料的校驗位來保證資料的安全,但它不是以單獨硬碟來存放資料的校驗位,而是將資料段的校驗位互動存放於各個硬碟上。這樣,任何一個硬碟損壞,都可以根據其它硬碟上的校驗位來重建損壞的資料。硬碟的利用率為n-1。但是它對資料傳輸的並行性解決不好,而且控制器的設計也相當困難。RAID 3 與RAID 5相比,重要的區別在於RAID 3每進行一次資料傳輸,需涉及到所有的陣列盤。而對於RAID 5來說,大部分資料傳輸只對一塊磁碟操作,可進行並行操作。在RAID 5中有「寫損失」,即每一次寫操作,將產生四個實際的讀/寫操作,其中兩次讀舊的資料及奇偶資訊,兩次寫新的資料及奇偶資訊。RAID-5的話,優點是提供了冗餘性(支援一塊盤掉線後仍然正常執行),磁碟空間利用率較高(N-1/N),讀寫速度較快(N-1倍)。RAID5最大的好處是在一塊盤掉線的情況下,RAID照常工作,相對於RAID0必須每一塊盤都正常才可以正常工作的狀況容錯效能好多了。因此RAID5是RAID級別中最常見的一個型別。RAID5校驗位即P位是通過其它條帶資料做異或(xor)求得的。計算公式為P=D0xorD1xorD2…xorDn,其中p代表校驗塊,Dn代表相應的資料塊,xor是數學運運算元號異或。
RAID5校驗位演演算法詳解
P=D1 xor D2 xor D3 … xor Dn (D1,D2,D3 …Dn為資料塊,P為校驗,xor為異或運算)
XOR(Exclusive OR)的校驗原理如下表:
A值 B值 Xor結果
0 0 0
1 0 1
0 1 1
1 1 0
這里的A與B值就代表了兩個位,從中可以發現,A與B一樣時,XOR(非或又稱"非異或")結果為0,A與B不一樣時,XOR結果就是1,如果知道XOR結果,A和B中的任何兩個數值,就可以反推出剩下的一個數值。比如A為1,XOR結果為1,那麼B肯定為0,如果XOR結果為0,那麼B肯定為1。這就是XOR編碼與校驗的基本原理。
RAID6:兩種儲存的奇偶校驗碼的磁碟結構
raid6名字很長,但是如果看到圖,大家立刻會明白是為什麼,請注意p0代表第0帶區的奇偶校驗值,而pA代表資料塊A的奇偶校驗值。它是對RAID5的擴充套件,主要是用於要求資料絕對不能出錯的場合。當然了,由於引入了第二種奇偶校驗值,所以需要N+2個磁碟,同時對控制器的設計變得十分復雜,寫入速度也不好,用於計算奇偶校驗值和驗證資料正確性所花費的時間比較多,造成了不必須的負載。我想除了軍隊沒有人用得起這種東西。
常見的RAID6組建型別RAID 6(6D + 2P)
1 RAID 6(6D + 2P)原理
和RAID 5相似,RAID 6(6D + 2P)根據條帶化的資料生成校驗資訊,條帶化資料和校驗資料一起分散儲存到RAID組的各個磁碟上。在圖1中,D0,D1,D2,D3,D4和D5是條帶化的資料,P代表校驗資料,Q是第二份校驗資料。
RAID 6(6D + 2P)根據條帶化的資料生成校驗資訊,條帶化資料和校驗資料一起分散儲存到RAID組的各個磁碟上
RAID 6校驗資料生成公式(P和Q):
P的生成用了異或
P = D0 XOR D1 XOR D2 XOR D3 XOR D4 XOR D5
Q的生成用了系數和異或
Q = A0*D0 XOR A1*D1 XOR A2*D2 XOR A3*D3 XOR A4*D4 XOR A5*D5
D0~D5:條帶化資料
A0~A5:系數
XOR:異或
*:乘
在RAID 6中,當有1塊磁碟出故障的時候,利用公式1恢復資料,這個過程是和RAID 5一樣的。而當有2塊磁碟同時出故障的時候,就需要同時用公式1和公式2來恢復資料了。
各系數A0~A5是線性無關的系數,在D0,D1,D2,D3,D4,D5,P,Q中有兩個未知數的情況下,也可以聯列求解兩個方程得出兩個未知數的值。這樣在一個RAID組中有兩塊磁碟同時壞的情況下,也可以恢復資料。
上面描述的是校驗資料生成的演演算法。其實RAID 6的核心就是有兩份檢驗資料,以保證兩塊磁碟同時出故障的時候,也能保障資料的安全。
RAID7:優化的高速資料傳送磁碟結構
RAID7所有的I/O傳送均是同步進行的,可以分別控制,這樣提高了系統的並行性,提高系統訪問資料的速度;每個磁碟都帶有高速緩沖儲存器,實時作業系統可以使用任何實時操作晶片,達到不同實時系統的需要。允許使用SNMP協議進行管理和監視,可以對校驗區指定獨立的傳送通道以提高效率。可以連線多台主機,因為加入高速緩沖儲存器,當多使用者訪問系統時,訪問時間幾乎接近於0。由於採用並行結構,因此資料訪問效率大大提高。需要注意的是它引入了一個高速緩沖儲存器,這有利有弊,因為一旦系統斷電,在高速緩沖儲存器內的資料就會全部丟失,因此需要和UPS一起工作。當然了,這么快的東西,價格也非常昂貴。
RAID10/01:高可靠性與高效磁碟結構
這種結構無非是一個帶區結構加一個鏡象結構,因為兩種結構各有優缺點,因此可以相互補充,達到既高效又高速還可以互為映象的目的。大家可以結合兩種結構的優點和缺點來理解這種新結構。這種新結構的價格高,可擴充性不好。主要用於容量不大,但要求速度和差錯控制的資料庫中。
其中可分為兩種組合:RAID10和RAID01
RAID 10是先鏡射再分割槽資料。是將所有硬碟分為兩組,視為是RAID 0的最低組合,然後將這兩組各自視為RAID 1運作。RAID 10有著不錯的讀取速度,而且擁有比RAID 0更高的資料保護性。
RAID 01則是跟RAID 10的程式相反,是先分割槽再將資料鏡射到兩組硬碟。它將所有的硬碟分為兩組,變成RAID 1的最低組合,而將兩組硬碟各自視為RAID 0運作。RAID 01比起RAID 10有著更快的讀寫速度,不過也多了一些會讓整個硬碟組停止運轉的機率;因為只要同一組的硬碟全部損毀,RAID 01就會停止運作,而RAID 10則可以在犧牲RAID 0的優勢下正常運作。
RAID 10巧妙的利用了RAID 0的速度以及RAID 1的保護兩種特性,不過它的缺點是需要的硬碟數較多,因為至少必須擁有四個以上的偶數硬碟才能使用。
RAID 50:被稱為分布奇偶位陣列條帶
同RAID 10相仿的,它具有RAID 5和RAID 0的共同特性。它由兩組RAID 5磁碟組成(每組最少3個),每一組都使用了分散式奇偶位,而兩組硬碟再組建成RAID 0,實驗跨磁碟抽取資料。RAID 50提供可靠的資料儲存和優秀的整體效能,並支援更大的捲尺寸。即使兩個物理磁碟發生故障(每個陣列中一個),資料也可以順利恢復過來。
RAID 50最少需要6個驅動器,它最適合需要高可靠性儲存、高讀取速度、高資料傳輸效能的應用。這些應用包括事務處理和有許多使用者存取小檔案的辦公應用程式。
RAID 53:稱為高效資料傳送磁碟結構
結構的實施同Level 0資料條陣列,其中,每一段都是一個RAID 3陣列。它的冗餘與容錯能力同RAID 3。這對需要具有高資料傳輸率的RAID 3配置的系統有益,但是它價格昂貴、效率偏低。
RAID 1.5:一個新生的磁碟陣列方式
它具有RAID 0+1的特性,而不同的是,它的實現只需要2個硬碟。
從表面上來看,組建RAID 1.5後的磁碟,兩個都具有相同的資料。當然,RAID 1.5也是一種不能完全利用磁碟空間的磁碟陣列模式,因此,兩個80GB的硬碟在組建RAID 1.5後,和RAID 1是一樣的,即只有80GB的實際使用空間,另外80GB是它的備份資料。如果把兩個硬碟分開,分別把他們執行在原系統,也是暢通無阻的。但通過實際應用,我們發現如果兩個硬碟在分開執行後,其資料的輕微改變都會引起再次重組後的磁碟陣列,沒法實現完全的資料恢復,而是以資料較少的磁碟為准。
:ke../view/7102.htm
一是基於埠的靜態vlan,一是基於mac地址的動態vlan,
布局最好是根據電路的原理先把元器件布局好,布線的話,數位電路用自動布線加手工調整,也可以先把關鍵的部分手工布好,再自動走其他的線,最後手工調整,類比電路、高頻電路都是需要手工布線的 自動的快,手動的是合理
一般是先自動後再用手動更改自動布線效率高,手工布線更合理
air sole:元祖級氣墊,厚1/2英寸,具有一定減震力現在常常用於入門級球鞋中。分為內建和外接。
zoom air:在一個較薄的氣墊中加入立體織物,以增強其彈性,多用於前掌內建,以增加啟動速度。
zoom cage:zoom air的加大版本,在強調彈性的同時加強了緩震性,但是由於設計因素,因此外部基本上加上龍骨作為支撐。多用於跑鞋。
air max:氣體容量大,緩震效果一流,內部分隔為不同氣室,氣壓不同,以增強穩定性。多用於中鋒鞋或者後掌。腳感較硬,沉重。
total max:理解為巨型max就可以了。
tuned air:一種非常好的氣墊,內部半圓形球體可以調節氣壓,緩震效果一流,但是成本太高,已經幾乎絕跡,但是有的跑鞋上貌似還有使用的說。
shox:工程橡膠一體鑄成的圓柱體結構,機械緩震體系,依賴形變來緩沖並反彈,目前唯一經過證實可以提高彈跳的科技。
impax:另外一種機械緩震系統,依靠拱形結構在運動中的形變來吸收沖擊力。實際應用效果遠不如理論效果,緩震較差,硬。
i.p.s:jordan系列自主研發的最新科技,根據運動中足底受力點來安置不同密度的phylon柱來提供緩震,用於jordan鞋。
phylon:就是你看見的nike的鞋子的白色鞋底
單提馬:中路防守薄弱 可以起橫車在六路和四路加強中路防與攻 注意對手一般會從中路進攻 比如盤頭馬。 窩心炮:炮窩心不宜太久,如果出不去了會造成麻煩 一般是為了強行吃對方中路的兵或進五路兵。 巡河車:對掉兵卒,活馬路,並且保馬,要注意如果你是車 馬 兵這樣的位置,對方進炮拴住你車和馬 那就相當麻煩了,所以進巡河車一定注意對方的炮。 夾炮屏風:炮在士角的位置 然後上兩個正馬,一般走成士角炮 和 過宮炮 局,靈活運用炮,攻守兼備。但要注意對方會出車騷擾你的陣型 特別是沒有跟的馬。 仙人指路:第一步走三路或七路兵,應付對仙人指路有同樣進兵卒,有頑強兇狠的直接運炮打兵。所以要看對方怎麼走,這種開局比較考棋力。初學者一般不建議走。 飛相局:首著飛相,比較注重防守,可以走成很多布局。。
一般的分旱秧和水秧,這個前期秧苗耐旱點且工作簡單一些,但是浪費種子多一點秧苗沒有水秧苗好。至於很詳細的東西就不好說了。
動態布局,也就是可以根據業務的需求改變介面。實際上就是用程式碼寫出介面,程式碼量比較大。而且維護起來十分的繁瑣。特別是一些介面空間比較多的時候。靜態的布局,是通過xml來實現的,適用於頁面比較固定的情況。但是維護起來比較方便。
噴墨印表機優點:整機價格相對彩色鐳射機便宜,較低的一次性購買成本獲得彩色照片級輸出的效果,缺點:使用耗材為墨盒,成本較高,長時間不用容易堵頭;
鐳射印表機優點:耗材單張列印成本低,耗材為墨粉,長時間不用也不用擔心堵頭的問題,列印速度快,高階產品可以滿足高負荷企業級輸出以及圖文輸出,缺點:中低端彩激的彩色列印效果不如噴墨機,可使用的列印介質較少;
針式印表機優點:可以復寫列印(發票及多聯單據),可以超厚列印(存摺證書列印),耗材為色帶,耗材成本低,缺點:工作噪音大,體積不可能縮小,列印精度不如噴墨及鐳射機。
E. 11 幀布局——FrameLayout
FrameLayout 應該說是 Android 常用UI布局裡面最簡單的一種,顧名思義,它的布局方式就是將 View 一幀一幀的疊加到一起,有點類似 Photoshop 裡面的圖層的概念。在學習 FrameLayout 的過程中,你會發現基於它可以設計出很多有意思的 Android UI。那麼接下來,我們來一起一探究竟。
FrameLayout 是 最簡單且最高效 的布局形式,不過 FrameLayout 的使用頻率相比其他的 Layout 來講要更少很多,主要是因為很多時候它只是作為一個容器來顯示單個 View 或者多個 View 重疊的場景。
用過 Photoshop 的朋友對「圖層」的概念應該比較熟悉,我們可以插入很多個圖層,後添加的圖層會擋住先添加的圖層,然後針對每個圖層我們可以任意的設置它在整個圖片中的位置。同樣的,我們可以設置 FrameLayout 內部 View 所處的位置,與 RelativeLayout 相似,可以設置放置在上下左右,同樣也可以設置邊距。辯滲如果放置了多個 View,那麼他們會按照放置的順序依次疊加扮族,後加入 View 的會擋住前面加入的 View。
在第 1 小節我們提到過,FrameLayout 可以設置內部 View 所在的位置,那麼這幾個屬性和 RelativeLayout 一樣,這里不再重復,主要介紹一下 FrameLayout 特有又常用的兩個屬性: android:foreground 和 android:foregroundGravity 。
android:foreground: 設置 FrameLayout 的前景圖像
前景圖像會置於 FrameLayout 內部所有 View 的層級之上,直接設置圖片的資源 id 即可,如下:
android:foregroundGravity: 設置 FrameLayout 前景圖片的擺放位置,設置方式與 RelativeLayout 中的 View 一樣,如:
我們的 FrameLayout 需要滿足以下要求:
效果如下:
這就是 FrameLayout 的基本用法。
到這里,基本上你已經掌握了 FrameLayout 的用法,可能你會有所疑惑,看起來 FrameLayout 也沒有什麼特別好的地方,似乎完全可以被 RelativeLayout 替代,所以很多人在開發過程中,往往會忘記還有這么個 Layout。其實越是往後學你越會發現,FrameLayout 的簡單不僅僅體現在使用上,更大的優勢是在於其性能。當你的屏幕上控制項不太多時,比如 Android 的桌面 Widget,或者 Home 應用,大多都是直接採用 FrameLayout 完成的布局。
事實上,還有一處是 FrameLayout 用攜缺脊的最多的地方,也是一個非常隱蔽的地方。如果我們打開 Hierarchy Viewer 或者類似的 View 分析工具,我們可以看到Android的每一個頁面都是在一個 FrameLayout 中完成的布局,也就是無論你定義的布局有多復雜,最終都會被放到一個 FrameLayout 當中顯示,這也體現了 FrameLayout 的強大,在今後的學習工作中,希望大家一定不要忽視了 FrameLayout,在此為大家埋下一個伏筆。
這里需要再次強調:FrameLayout 是 最簡單,最高效 的布局方式。它的布局方式很容易理解,我們通過它可以將內部的 View 防止到任意的方位,如果內部有多個 View,那麼按照防止順序,後加入的View會擋住前面加入的 View。