?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
GridLayout
版本:Android 4.0 r1
?
結(jié)構(gòu)
繼承關(guān)系
public class GridLayout extends ViewGroup
????????
java.lang.Object
android.view.View
???????? android.view.ViewGroup
?????????????????? android.widget.GridLayout
?
類概述
?(摘自這里。)
該布局把子視圖存放在一個(gè)矩形網(wǎng)格中。
網(wǎng)格是由被無數(shù)虛細(xì)線分割成多個(gè)單元格的可視區(qū)域組成。貫穿整個(gè)API的網(wǎng)格線通過網(wǎng)格索引數(shù)來指定。一個(gè)N列的網(wǎng)格在運(yùn)行中包含0到N的 N+1個(gè)索引,不管怎么配置GridLayout 網(wǎng)格索引0是固定網(wǎng)格容器的前邊距,索引N是固定容器的后邊距(考慮后填充)。
?
行和列的規(guī)格
在rowSpec和columnSpec布局參數(shù)的定義后,子視圖占用一個(gè)或者多個(gè)連續(xù)單元格,每個(gè)規(guī)范是定義被占用的行或列的設(shè)置和子視圖在單元格是如何對(duì)齊。盡管各個(gè)單元格在一個(gè)GridLayout中不重疊,GridLayout并沒有阻止子視圖被定義為占據(jù)相同的單元格或者單元格組。然而在這種情況下,也不能保證子視圖在布局操作完成后自己不會(huì)重疊。
?
默認(rèn)單元格分配
如果一個(gè)子視圖沒有指定占據(jù)的行和列索引,GridLayout會(huì)自動(dòng)指定單元格位置,包括:方向,行數(shù)和列數(shù)的屬性。
?
空間(Place)
子視圖之間的空間可能會(huì)通過使用專用的空間視圖的實(shí)例,或通過設(shè)置leftMargin,topMargin,rightMargin和bottomMargin布局參數(shù)后指定。當(dāng)設(shè)置為useDefaultMargins屬性,根據(jù)當(dāng)前平臺(tái)的用戶界面風(fēng)格,子視圖周圍的默認(rèn)邊距將自動(dòng)分配。每個(gè)被定義的邊距可通過分配到相應(yīng)的布局參數(shù)來獨(dú)立覆蓋。默認(rèn)值通常在不同組成部分會(huì)產(chǎn)生一個(gè)合理的間距,但在不同平臺(tái)版本之間可能會(huì)改變。
?
多余的空間分布
GridLayout的多余的空間分布是基于優(yōu)先級(jí),而不是根據(jù)比例。
一個(gè)子視圖的的伸展程度通過其行和列的組的對(duì)其屬性推算(這是典型的設(shè)置子視圖的布局參數(shù)gravity屬性)。如果對(duì)齊是沿著給定的軸定義,那么該組件在這個(gè)方向具有靈活性。如果沒有對(duì)齊,相反組件會(huì)缺乏靈活性。
多個(gè)組件在同一行或列組被認(rèn)為平行的。如果組中所有在內(nèi)的組件是靈活的,那么這個(gè)小組是靈活的。位置在一個(gè)共同的邊界兩側(cè)的行和列組,反而認(rèn)為采取同一系列。如果復(fù)合組的一個(gè)元素是靈活的,則這個(gè)復(fù)合組是靈活的。
為了使一列伸展,確保所有的組件,它里面定義一個(gè)的gravity屬性。為了防止從列伸展,確保列中的組成部分之一沒有定義的gravity屬性。
靈活性的原則并不能完全的消除歧義,推薦GridLayout中的算法更接近其右側(cè)和底邊的行和列。
?
局限性
GridLayout的不提供支持空間(weight)分配的原則,空間分配界定。在一般情況下,可以配置一個(gè)GridLayout多余的空間分布在多個(gè)行或列之間的不相同的比例。
一些常見的適用情況,如下:將等量的周圍空間中的一個(gè)組成部分單元格組;使用居中對(duì)齊(或gravity屬性)。對(duì)于完全控制對(duì)或列中多余的空間分布;使用的LinearLayout子視圖約束相關(guān)的單元格組的組成部分。當(dāng)使用這些技術(shù),記住,單元格組可能定義重疊。
為GridLayout的使用布局參數(shù)的完整描述GridLayout.LayoutParams。
?
XML屬性
屬性名稱 |
描述 |
|||||||||
android:alignmentMode |
當(dāng)設(shè)置alignMargins,使視圖的外邊界之間進(jìn)行校準(zhǔn),定義其邊距,當(dāng)設(shè)置alignBounds,使視圖的邊界之間進(jìn)行校準(zhǔn),默認(rèn)設(shè)置alignMargins。
|
|||||||||
android:columnCount |
自動(dòng)定位子視圖時(shí)創(chuàng)建的最大列數(shù) |
|||||||||
android:columnOrderPreserved |
當(dāng)設(shè)置為true,使列邊界顯示的順序和列索引的順序相同。默認(rèn)是true。 |
|||||||||
android:orientation |
Orientation屬性在布局時(shí)候不被使用,它僅當(dāng)子視圖布局參數(shù)沒有指定的時(shí)候分配行和列,GridLayout在這種情況下和LinearLayout使用方法一樣,根據(jù)標(biāo)志的值將所有組件放在單個(gè)行或者放在當(dāng)個(gè)列中。在水平情況下,當(dāng)一行的所有列都填充滿時(shí),columnCount屬性額外提供創(chuàng)建新行。同樣在垂直情況下,rowCount屬性有相同的作用,默認(rèn)是水平的。
|
|||||||||
android:rowCount |
自動(dòng)定位子視圖時(shí)創(chuàng)建的最大行數(shù) |
|||||||||
android:rowOrderPreserved |
當(dāng)設(shè)置為true,使行邊界顯示的順序和行索引的順序相同。默認(rèn)是true。 |
|||||||||
android:useDefaultMargins |
當(dāng)設(shè)置ture,當(dāng)沒有指定視圖的布局參數(shù)時(shí),告訴GridLayout使用默認(rèn)的邊距。默認(rèn)值是false。 |
?
常量
類型 |
屬性名稱 |
描述 |
int |
ALIGN_BOUNDS |
這是alignmentMode的常量,當(dāng)alignmentMode設(shè)置成ALIGN_BOUNDS,每個(gè)組件之間的原始視圖邊界邊距對(duì)齊:即組件的區(qū)域通過下面分隔:頂部,左側(cè),底部和右側(cè)的屬性。默認(rèn)值:0 |
int |
ALIGN_MARGINS |
這是alignmentMode的常量。當(dāng)alignmentMode設(shè)置ALIGN_MARGINS,每個(gè)視圖的邊界向外延伸,根據(jù)他們的邊距,產(chǎn)生的矩形邊距對(duì)齊。默認(rèn)值:1 |
int |
HORIZONTAL |
水平方向。默認(rèn)值:0 |
int |
UNDEFINED |
常數(shù)用于表示一個(gè)不確定的值。該字段可以使用這個(gè)值來表示他們的值觀尚未確定。同樣的方法可以返回這個(gè)值,表明沒有能實(shí)現(xiàn)返回的合適值,該常數(shù)的值(目前MIN_VALUE)是為了避免可能不知道其標(biāo)志的有效值之間的混淆。 |
int |
VERTICAL |
垂直方向。默認(rèn)值:1 |
?
字段
public static final?GridLayout.Alignment |
|
屬性名稱 |
描述 |
BASELINE |
表示一個(gè)視圖應(yīng)該和在同一單元格組的其他視圖基線對(duì)齊,這個(gè)常量僅用做rowSpecs對(duì)齊 |
BOTTOM |
表示一個(gè)視圖應(yīng)該和在同一單元格組的其他視圖底部邊距對(duì)齊。 |
CENTER |
表示一個(gè)視圖應(yīng)該和在同一單元格組的其他視圖居中對(duì)齊,此常數(shù)可用于rowSpecs和columnSpecs。 |
FILL |
表示視圖應(yīng)該擴(kuò)大以填充其單元格組。此常數(shù)可用于rowSpecs和columnSpecs。 |
LEFT |
表示一個(gè)視圖應(yīng)該和在同一單元格組的其他視圖左邊距對(duì)齊。 |
RIGHTT |
表示一個(gè)視圖應(yīng)該和在同一單元格組的其他視圖右邊距對(duì)齊。 |
TOP |
表示一個(gè)視圖應(yīng)該和在同一單元格組的其他視圖上邊距對(duì)齊。 |
?
?
公共方法
public?GridLayout.LayoutParams?generateLayoutParams?(AttributeSet?attrs)
在提供的屬性集基礎(chǔ)上返回一個(gè)新的布局參數(shù)設(shè)置。
參數(shù)
attrs?????????????????? 創(chuàng)建布局參數(shù)的屬性
返回值
?????????????????? ViewGroup.LayoutParams實(shí)例或者他的派生實(shí)例
?
public int?getAlignmentMode?()
返回對(duì)齊方式.
相關(guān)XML屬性
android:alignmentMode
返回值
對(duì)齊方式; ?ALIGN_BOUNDS
?或者?ALIGN_MARGINS
參見
ALIGN_BOUNDS
ALIGN_MARGINS
setAlignmentMode(int)
?
public int?getColumnCount?()
返回當(dāng)前的列數(shù)。通過?setColumnCount(int)方法最后一次設(shè)置的值,如果沒有這樣的值被設(shè)置,返回在columnSpec定義中的每一個(gè)上限的最大值。
相關(guān)XML屬性
android:columnCount
返回值
當(dāng)前的列數(shù)
參見
setColumnCount(int)
columnSpec
?
public int?getOrientation?()
返回當(dāng)前方向。
相關(guān)XML屬性
android:orientation
???????? 返回值
?HORIZONTAL
?或者?VERTICAL
參見
setOrientation(int)
?
public int?getRowCount?()
返回當(dāng)前的行數(shù)。通過?setRowCount(int)方法最后一次設(shè)置的值,如果沒有這樣的值被設(shè)置,返回在rowSpec定義中的每一個(gè)上限的最大值。
相關(guān)XML
android:rowCount
返回值
返回當(dāng)前的行數(shù)。
參見
setRowCount(int)
rowSpec
?
public boolean?getUseDefaultMargins?()
返回是否GridLayout分配時(shí)候,沒有相應(yīng)布局參數(shù)定義的默認(rèn)邊距。
相關(guān)XML屬性
android:useDefaultMargins
返回值
如果分配默認(rèn)的邊距返回ture
參見
setUseDefaultMargins(boolean)
?
public boolean isColumnOrderPreserved ()
返回是否通過表格索引順序定制列邊界。
相關(guān)XML屬性
android:columnOrderPreserved
返回值
如果列邊界按照索引的順序顯示返回ture,否則返回false
參見
setColumnOrderPreserved(boolean)
?
public boolean isRowOrderPreserved ()
返回是否通過表格索引順序定制行邊界
相關(guān)XML屬性
android:rowOrderPreserved
返回值
如果行邊界按照索引順序顯示返回ture,否則返回false
參見
setRowOrderPreserved(boolean)
?
public void requestLayout ()
當(dāng)無效的視圖布局發(fā)生變化時(shí)候調(diào)用它,將通過視圖樹進(jìn)行布局傳遞。
?
public void setAlignmentMode (int alignmentMode)
設(shè)置該容器中所有子視圖之間的對(duì)齊方式
默認(rèn)的值是ALIGN_MARGINS.
相關(guān)XML屬性
android:alignmentMode
參數(shù)
alignmentMode?????? ALIGN_BOUNDS 或者 ALIGN_MARGINS
參見
ALIGN_BOUNDS
ALIGN_MARGINS
getAlignmentMode()
?
public void setColumnCount (int columnCount)
列數(shù)是僅用于當(dāng)沒有一個(gè)布局參數(shù)指定時(shí)候,生成默認(rèn)的列/行索引。
相關(guān)XML屬性
android:columnCount
參數(shù)
columnCount?? 列的數(shù)量.
參見
getColumnCount()
columnSpec
?
public void setColumnOrderPreserved (boolean columnOrderPreserved)
當(dāng)此屬性為true,GridLayout的是被迫使他們相關(guān)的網(wǎng)格指數(shù)在視圖中以升序順序放置列的邊界。
當(dāng)此屬性是false,GridLayout是放置在任何最適合給定的約束水平列邊界的順序。
此屬性的默認(rèn)值是true。
相關(guān)XML屬性
android:columnOrderPreserved
參數(shù)
columnOrderPreserved?? 用ture是被迫使他們相關(guān)的網(wǎng)格指數(shù)在視圖中以升序順序放置列的邊界。
參見
isColumnOrderPreserved()
?
public void setOrientation (int orientation)
Orientation是僅用于當(dāng)沒有一個(gè)布局參數(shù)指定時(shí)候,生成默認(rèn)的列/行索引
默認(rèn)的屬性值是HORIZONTAL
相關(guān)XML屬性
android:orientation
參數(shù)
orientation?????? HORIZONTAL 或者 VERTICAL
參見
getOrientation()
?
public void setRowCount (int rowCount)
RowCount是僅用于當(dāng)沒有一個(gè)布局參數(shù)指定時(shí)候,生成默認(rèn)的列/行索引
相關(guān)XML屬性
android:rowCount
參數(shù)
rowCount???????? 行數(shù)
參見
getRowCount()
rowSpec
?
public void setRowOrderPreserved (boolean rowOrderPreserved)
當(dāng)此屬性為true,GridLayout是強(qiáng)制他們相關(guān)的網(wǎng)格指數(shù)在視圖中以升序順序放置行的邊界。
當(dāng)此屬性是false,GridLayout是放置在任何最適合給定的約束水平行邊界的順序。
此屬性的默認(rèn)值是true。
相關(guān)XML屬性
android:rowOrderPreserved
參數(shù)
rowOrderPreserved 用ture是強(qiáng)制他們相關(guān)的網(wǎng)格指數(shù)在視圖中以升序順序放置列的邊界。
參見
isRowOrderPreserved ()
?
public void setUseDefaultMargins (boolean useDefaultMargins)
當(dāng)設(shè)置為true, GridLayout根據(jù)子視圖的的視覺特征分配在子視圖周圍的默認(rèn)邊距,每個(gè)定義的邊距,可獨(dú)立分配到相應(yīng)的布局參數(shù)覆蓋。
如果為false,所有邊距的默認(rèn)值是零。
當(dāng)設(shè)置為true時(shí),考慮設(shè)置的alignmentMode屬性值ALIGN_BOUNDS。
此屬性的默認(rèn)值是false。
相關(guān)XML屬性
android:useDefaultMargins
參數(shù)
useDefaultMargins 使用true分配默認(rèn)的邊距
參見
getUseDefaultMargins()
setAlignmentMode(int)
?
public static GridLayout.Spec spec (int start, GridLayout.Alignment alignment)
返回一個(gè)Spec,其中:
l?? spec.span = [start, start + 1]
l?? spec.alignment = alignment
參數(shù)
start???????? the ????????? 開始索引
alignment???????? 對(duì)齊方式
?
public static GridLayout.Spec spec (int start, int size)
返回一個(gè)Spec,其中:
l?? spec.span = [start, start + size]
參數(shù)
start?????????????????? 開始位置
size?????????? 大小
?
public static GridLayout.Spec spec (int start, int size, GridLayout.Alignment alignment)
返回一個(gè)Spec,其中:
l?? spec.span = [start, start + size]
l?? spec.alignment = alignment
參數(shù)
start??????????????????????????? 開始位置
size???????????????????? 大小
alignment???????? 對(duì)齊方式
?
public static GridLayout.Spec spec (int start)
返回一個(gè)Spec,其中:
l?? spec.span = [start, start + 1]
參數(shù)
start??????????????????????????? 開始索引
?
保護(hù)方法
protected GridLayout.LayoutParams generateDefaultLayoutParams ()
返回一組默認(rèn)布局參數(shù)。沒有設(shè)置布局參數(shù)執(zhí)行addview(View)時(shí),這些參數(shù)被請(qǐng)求時(shí)返回null,并拋出一個(gè)異常。
返回值
一組默認(rèn)布局參數(shù)或者null
?
protected GridLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
返回一組合法的受支持的布局參數(shù)。當(dāng)一個(gè)ViewGroup傳遞一個(gè)布局參數(shù)沒有通過checkLayoutParams(android.view.ViewGroup.LayoutParams)檢測的視圖時(shí),此方法被調(diào)用。此方法會(huì)返回一組新的適合當(dāng)前ViewGroup的布局參數(shù),可能從指定的一組布局參數(shù)中復(fù)制適當(dāng)?shù)膶傩浴?/span>
參數(shù)
p 被轉(zhuǎn)換成一組適合當(dāng)前 ViewGroup的布局參數(shù).
返回值
一個(gè)ViewGroup.LayoutParams的實(shí)例或者其中的一個(gè)子節(jié)點(diǎn)
?
補(bǔ)充
???????? 文章精選
?????????????????? Android 4.0新增Space及GridLayout初談