結構html
繼承關係java
public class GridLayout extends ViewGroupandroid
java.lang.Object算法
android.view.View佈局
android.view.ViewGroupspa
android.widget.GridLayoutcode
該佈局把子視圖存放在一個矩形網格中。orm
網格是由被無數虛細線分割成多個單元格的可視區域組成。貫穿整個API的網格線經過網格索引數來指定。一個N列的網格在運行中包含0到N的 N+1個索引,無論怎麼配置GridLayout 網格索引0是固定網格容器的前邊距,索引N是固定容器的後邊距(考慮後填充)。htm
行和列的規格繼承
在rowSpec和columnSpec佈局參數的定義後,子視圖佔用一個或者多個連續單元格,每一個規範是定義被佔用的行或列的設置和子視圖在單元格是如何對齊。儘管各個單元格在一個GridLayout中不重疊,GridLayout並沒有阻止子視圖被定義爲佔據相同的單元格或者單元格組。然而在這種狀況下,也不能保證子視圖在佈局操做完成後本身不會重疊。
默認單元格分配
若是一個子視圖沒有指定佔據的行和列索引,GridLayout會自動指定單元格位置,包括:方向,行數和列數的屬性。
空間(Place)
子視圖之間的空間可能會經過使用專用的空間視圖的實例,或經過設置leftMargin,topMargin,rightMargin和bottomMargin佈局參數後指定。當設置爲useDefaultMargins屬性,根據當前平臺的用戶界面風格,子視圖周圍的默認邊距將自動分配。每一個被定義的邊距可經過分配到相應的佈局參數來獨立覆蓋。默認值一般在不一樣組成部分會產生一個合理的間距,但在不一樣平臺版本之間可能會改變。
多餘的空間分佈
GridLayout的多餘的空間分佈是基於優先級,而不是根據比例。
一個子視圖的的伸展程度經過其行和列的組的對其屬性推算(這是典型的設置子視圖的佈局參數gravity屬性)。若是對齊是沿着給定的軸定義,那麼該組件在這個方向具備靈活性。若是沒有對齊,相反組件會缺少靈活性。
多個組件在同一行或列組被認爲平行的。若是組中全部在內的組件是靈活的,那麼這個小組是靈活的。位置在一個共同的邊界兩側的行和列組,反而認爲採起同一系列。若是複合組的一個元素是靈活的,則這個複合組是靈活的。
爲了使一列伸展,確保全部的組件,它裏面定義一個的gravity屬性。爲了防止從列伸展,確保列中的組成部分之一沒有定義的gravity屬性。
靈活性的原則並不能徹底的消除歧義,推薦GridLayout中的算法更接近其右側和底邊的行和列。
侷限性
GridLayout的不提供支持空間(weight)分配的原則,空間分配界定。在通常狀況下,能夠配置一個GridLayout多餘的空間分佈在多個行或列之間的不相同的比例。
一些常見的適用狀況,以下:將等量的周圍空間中的一個組成部分單元格組;使用居中對齊(或gravity屬性)。對於徹底控制對或列中多餘的空間分佈;使用的LinearLayout子視圖約束相關的單元格組的組成部分。當使用這些技術,記住,單元格組可能定義重疊。
爲GridLayout的使用佈局參數的完整描述GridLayout.LayoutParams。
XML屬性
屬性名稱 |
描述 |
|||||||||
android:alignmentMode |
當設置alignMargins,使視圖的外邊界之間進行校準,定義其邊距,當設置alignBounds,使視圖的邊界之間進行校準,默認設置alignMargins。
|
|||||||||
自動定位子視圖時建立的最大列數 |
||||||||||
當設置爲true,使列邊界顯示的順序和列索引的順序相同。默認是true。 |
||||||||||
Orientation屬性在佈局時候不被使用,它僅當子視圖佈局參數沒有指定的時候分配行和列,GridLayout在這種狀況下和LinearLayout使用方法同樣,根據標誌的值將全部組件放在單個行或者放在當個列中。在水平狀況下,當一行的全部列都填充滿時,columnCount屬性額外提供建立新行。一樣在垂直狀況下,rowCount屬性有相同的做用,默認是水平的。
|
||||||||||
自動定位子視圖時建立的最大行數 |
||||||||||
當設置爲true,使行邊界顯示的順序和行索引的順序相同。默認是true。 |
||||||||||
當設置ture,當沒有指定視圖的佈局參數時,告訴GridLayout使用默認的邊距。默認值是false。 |
常量
類型 |
屬性名稱 |
描述 |
int |
這是alignmentMode的常量,當alignmentMode設置成ALIGN_BOUNDS,每一個組件之間的原始視圖邊界邊距對齊:即組件的區域經過下面分隔:頂部,左側,底部和右側的屬性。默認值:0 |
|
int |
這是alignmentMode的常量。當alignmentMode設置ALIGN_MARGINS,每一個視圖的邊界向外延伸,根據他們的邊距,產生的矩形邊距對齊。默認值:1 |
|
int |
水平方向。默認值:0 |
|
int |
常數用於表示一個不肯定的值。該字段可使用這個值來表示他們的值觀還沒有肯定。一樣的方法能夠返回這個值,代表沒有能實現返回的合適值,該常數的值(目前MIN_VALUE)是爲了不可能不知道其標誌的有效值之間的混淆。 |
|
int |
垂直方向。默認值:1 |
字段
public static final GridLayout.Alignment |
|
屬性名稱 |
描述 |
表示一個視圖應該和在同一單元格組的其餘視圖基線對齊,這個常量僅用作rowSpecs對齊 |
|
表示一個視圖應該和在同一單元格組的其餘視圖底部邊距對齊。 |
|
表示一個視圖應該和在同一單元格組的其餘視圖居中對齊,此常數可用於rowSpecs和columnSpecs。 |
|
表示視圖應該擴大以填充其單元格組。此常數可用於rowSpecs和columnSpecs。 |
|
表示一個視圖應該和在同一單元格組的其餘視圖左邊距對齊。 |
|
表示一個視圖應該和在同一單元格組的其餘視圖右邊距對齊。 |
|
表示一個視圖應該和在同一單元格組的其餘視圖上邊距對齊。 |
公共方法
public GridLayout.LayoutParams generateLayoutParams (AttributeSet attrs)
在提供的屬性集基礎上返回一個新的佈局參數設置。
參數
attrs 建立佈局參數的屬性
返回值
ViewGroup.LayoutParams實例或者他的派生實例
public int getAlignmentMode ()
返回對齊方式.
相關XML屬性
返回值
對齊方式; ALIGN_BOUNDS
或者 ALIGN_MARGINS
參見
public int getColumnCount ()
返回當前的列數。經過 setColumnCount(int)方法最後一次設置的值,若是沒有這樣的值被設置,返回在columnSpec定義中的每個上限的最大值。
相關XML屬性
返回值
當前的列數
參見
public int getOrientation ()
返回當前方向。
相關XML屬性
返回值
參見
public int getRowCount ()
返回當前的行數。經過 setRowCount(int)方法最後一次設置的值,若是沒有這樣的值被設置,返回在rowSpec定義中的每個上限的最大值。
相關XML
返回值
返回當前的行數。
參見
public boolean getUseDefaultMargins ()
返回是否GridLayout分配時候,沒有相應佈局參數定義的默認邊距。
相關XML屬性
返回值
若是分配默認的邊距返回ture
參見
public boolean isColumnOrderPreserved ()
返回是否經過表格索引順序定製列邊界。
相關XML屬性
android:columnOrderPreserved
返回值
若是列邊界按照索引的順序顯示返回ture,不然返回false
參見
setColumnOrderPreserved(boolean)
public boolean isRowOrderPreserved ()
返回是否經過表格索引順序定製行邊界
相關XML屬性
android:rowOrderPreserved
返回值
若是行邊界按照索引順序顯示返回ture,不然返回false
參見
setRowOrderPreserved(boolean)
public void requestLayout ()
當無效的視圖佈局發生變化時候調用它,將經過視圖樹進行佈局傳遞。
public void setAlignmentMode (int alignmentMode)
設置該容器中全部子視圖之間的對齊方式
默認的值是ALIGN_MARGINS.
相關XML屬性
android:alignmentMode
參數
alignmentMode ALIGN_BOUNDS 或者 ALIGN_MARGINS
參見
ALIGN_BOUNDS
ALIGN_MARGINS
getAlignmentMode()
public void setColumnCount (int columnCount)
列數是僅用於當沒有一個佈局參數指定時候,生成默認的列/行索引。
相關XML屬性
android:columnCount
參數
columnCount 列的數量.
參見
getColumnCount()
columnSpec
public void setColumnOrderPreserved (boolean columnOrderPreserved)
當此屬性爲true,GridLayout的是被迫使他們相關的網格指數在視圖中以升序順序放置列的邊界。
當此屬性是false,GridLayout是放置在任何最適合給定的約束水平列邊界的順序。
此屬性的默認值是true。
相關XML屬性
android:columnOrderPreserved
參數
columnOrderPreserved 用ture是被迫使他們相關的網格指數在視圖中以升序順序放置列的邊界。
參見
isColumnOrderPreserved()
public void setOrientation (int orientation)
Orientation是僅用於當沒有一個佈局參數指定時候,生成默認的列/行索引
默認的屬性值是HORIZONTAL
相關XML屬性
android:orientation
參數
orientation HORIZONTAL 或者 VERTICAL
參見
getOrientation()
public void setRowCount (int rowCount)
RowCount是僅用於當沒有一個佈局參數指定時候,生成默認的列/行索引
相關XML屬性
android:rowCount
參數
rowCount 行數
參見
getRowCount()
rowSpec
public void setRowOrderPreserved (boolean rowOrderPreserved)
當此屬性爲true,GridLayout是強制他們相關的網格指數在視圖中以升序順序放置行的邊界。
當此屬性是false,GridLayout是放置在任何最適合給定的約束水平行邊界的順序。
此屬性的默認值是true。
相關XML屬性
android:rowOrderPreserved
參數
rowOrderPreserved 用ture是強制他們相關的網格指數在視圖中以升序順序放置列的邊界。
參見
isRowOrderPreserved ()
public void setUseDefaultMargins (boolean useDefaultMargins)
當設置爲true, GridLayout根據子視圖的的視覺特徵分配在子視圖周圍的默認邊距,每一個定義的邊距,可獨立分配到相應的佈局參數覆蓋。
若是爲false,全部邊距的默認值是零。
當設置爲true時,考慮設置的alignmentMode屬性值ALIGN_BOUNDS。
此屬性的默認值是false。
相關XML屬性
android:useDefaultMargins
參數
useDefaultMargins 使用true分配默認的邊距
參見
getUseDefaultMargins()
setAlignmentMode(int)
public static GridLayout.Spec spec (int start, GridLayout.Alignment alignment)
返回一個Spec,其中:
l spec.span = [start, start + 1]
l spec.alignment = alignment
參數
start the 開始索引
alignment 對齊方式
public static GridLayout.Spec spec (int start, int size)
返回一個Spec,其中:
l spec.span = [start, start + size]
參數
start 開始位置
size 大小
public static GridLayout.Spec spec (int start, int size, GridLayout.Alignment alignment)
返回一個Spec,其中:
l spec.span = [start, start + size]
l spec.alignment = alignment
參數
start 開始位置
size 大小
alignment 對齊方式
public static GridLayout.Spec spec (int start)
返回一個Spec,其中:
l spec.span = [start, start + 1]
參數
start 開始索引
保護方法
protected GridLayout.LayoutParams generateDefaultLayoutParams ()
返回一組默認佈局參數。沒有設置佈局參數執行addview(View)時,這些參數被請求時返回null,並拋出一個異常。
返回值
一組默認佈局參數或者null
protected GridLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
返回一組合法的受支持的佈局參數。當一個ViewGroup傳遞一個佈局參數沒有經過checkLayoutParams(android.view.ViewGroup.LayoutParams)檢測的視圖時,此方法被調用。此方法會返回一組新的適合當前ViewGroup的佈局參數,可能從指定的一組佈局參數中複製適當的屬性。
參數
p 被轉換成一組適合當前 ViewGroup的佈局參數.
返回值
一個ViewGroup.LayoutParams的實例或者其中的一個子節點
補充
文章精選
Android 4.0新增Space及GridLayout初談
☆ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆