?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
TableLayout
版本:Android 3.0 r1
?
結(jié)構(gòu)
繼承關(guān)系
public class TableLayout extends LinerLayout
????????
java.lang.Object
???????? android.view.View
? ????????????? android.view.ViewGroup
? ???? ??????????????? android.widget.LinearLayout
? ???? ?????? ??????????????? android.widget.TableLayout
?
類概述
按照行列來組織子視圖的布局。表格布局包含一系列的 TableRow
對(duì)象,用于定義行(實(shí)際上你也可以使用其它子對(duì)象,將在后面進(jìn)行解釋)。表格布局不為它的行、列和單元格顯示表格線。每個(gè)行可以包含0個(gè)以上(包括0)的單元格; 每個(gè)單元格可以設(shè)置一個(gè)View
對(duì)象.與行包含很多單元格一樣, 表格包含很多列。表格的單元格可以為空.單元格可以象 HTML 那樣跨列。
列的寬度由該列所有行中最寬的一個(gè)單元格決定.不過表格布局可以通過 setColumnShrinkable()
方法或者 setColumnStretchable()
方法來標(biāo)記某些列可以收縮或可以拉伸. 如果標(biāo)記為可以收縮,列寬可以收縮以使表格適合容器的大小。如果標(biāo)記為可以拉伸, 列寬可以拉伸以占用多余的空間。表格的總寬度由其父容器決定. 記住列可以同時(shí)具有可拉伸和可收縮標(biāo)記是很重要的。在列可以調(diào)整其寬度以占用可用空間, 但不能超過限度時(shí)是很有用的.最后,你可以通過調(diào)用setColumnCollapsed()
方法來隱藏列。
表格布局的子對(duì)象不能指定 layout_width
屬性.寬度永遠(yuǎn)是 MATCH_PARENT
。不過子對(duì)象可以定義 layout_height
屬性;其默認(rèn)值是 WRAP_CONTENT
. 如果子對(duì)象是 TableRow
,其高度永遠(yuǎn)是 WRAP_CONTENT
。
無論是在代碼還是在 XML 布局文件中,單元格必須安裝索引順序加入表格行. 列號(hào)是從 0 開始的.如果你不為子單元格指定列號(hào),其將自動(dòng)增值,使用下一個(gè)可用列號(hào). 如果你跳過某個(gè)列號(hào),他在表格行中作為空可以改對(duì)待。參見 ApiDemos 中通過 XML 創(chuàng)建表格的布局示例。
雖然表格布局典型的子對(duì)象是表格行,實(shí)際上你可以使用任何視圖類的子類, 作為表格視圖的直接子對(duì)象.視圖會(huì)作為只有一行并結(jié)合了所有列的單元格顯示。
參見
Table Layout tutorial
?
內(nèi)部類
class ?????? TableLayout.LayoutParams
該類強(qiáng)制將子視圖的寬度設(shè)為
MATCH_PARENT
, 將沒有設(shè)置高度的子視圖的高度設(shè)為
WRAP_CONTENT
。
?
XML屬性
屬性名稱 |
描述 |
android:collapseColumns |
隱藏從0開始的索引列。列直接必須用逗號(hào)隔開:1, 2, 5。非法或重復(fù)的設(shè)置將被忽略。 相關(guān)方法 setColumnCollapsed(int,boolean) |
android:shrinkColumns |
收縮從0開始的索引列。列直接必須用逗號(hào)隔開:1, 2, 5。非法或重復(fù)的設(shè)置將被忽略。你可以通過"*"代替收縮所有列。注意一列能同時(shí)表示收縮和拉伸。 相關(guān)方法 setColumnCollapsed(int,boolean) |
android:stretchColumns |
拉伸從0開始的索引列。列直接必須用逗號(hào)隔開:1, 2, 5。非法或重復(fù)的設(shè)置將被忽略。你可以通過"*"代替收縮所有列。注意一列能同時(shí)表示收縮和拉伸。 相關(guān)方法 setColumnCollapsed(int,boolean) |
?
構(gòu)造函數(shù)
public TableLayout (Context context)
為給定的上下文創(chuàng)建表格布局。
?????????????????? 參數(shù)
context ? 應(yīng)用程序上下文
?
public TableLayout (Context context, AttributeSet attrs)
使用指定的屬性集合為給定的上下文創(chuàng)建表格布局。
?????????????????? 參數(shù)
context ? 應(yīng)用程序上下文
attrs ?????? 屬性集合
?
公共方法
public void addView (View child)
添加子視圖。如果子視圖沒有設(shè)置布局參數(shù),則使用視圖組(ViewGroup)的布局參數(shù)為該視圖布局。
?????????????????? 參數(shù)
child ??????? 添加的子視圖
?
public void addView (View child, int index)
添加子視圖。如果子視圖沒有設(shè)置布局參數(shù),則使用視圖組(ViewGroup)的布局參數(shù)為該視圖布局。
?????????????????? 參數(shù)
child ??????? 添加的子視圖
index ????? 子視圖加入的位置索引
?
public void addView (View child, int index, ViewGroup.LayoutParams params)
用指定的布局參數(shù)添加一個(gè)子視圖。
?????????????????? 參數(shù)
child ??????? 添加的子視圖
index ????? 子視圖加入的位置索引
params ? 為子視圖指定得布局參數(shù)
?
public void addView (View child, ViewGroup.LayoutParams params)
使用指定的布局參數(shù)添加子視圖。
?????????????????? 參數(shù)
child ??????? 添加的子視圖
params ? 設(shè)置到子視圖上的布局參數(shù)
?
public TableLayout.LayoutParams generateLayoutParams (AttributeSet attrs)
返回一組基于提供的屬性集合的布局參數(shù)集合。
?????????????????? 參數(shù)
attrs ?????? 用于生成布局參數(shù)的屬性集
返回值
??? ?????????????????? ViewGroup.LayoutParams
或其子類的實(shí)例
?
public boolean isColumnCollapsed (int columnIndex)
返回指定列的折疊狀態(tài)。
?????????????????? 參數(shù)
columnIndex ? 列索引
返回值
折疊時(shí)為true;否則為false
?
public boolean isColumnShrinkable (int columnIndex)
返回指定的列是否可收縮。
?????????????????? 參數(shù)
columnIndex ? 列索引
返回值
??? ?????????????????? 如果列可以收縮,返回true;否則返回false
?
public boolean isColumnStretchable (int columnIndex)
返回指定的列是否可拉伸。
?????????????????? 參數(shù)
columnIndex ? 列索引
返回值
如果列可以拉伸,返回true;否則返回false
?
public boolean isShrinkAllColumns ()
指示是否所有的列都是可收縮的。
返回值
??? ?????????????????? 如果所有列都可收縮,返回true;否則返回false
?
public boolean isStretchAllColumns ()
指示是否所有的列都是可拉伸的。
返回值
??? ?????????????????? 如果所有列都可拉伸,返回true;否則返回false
?
public void requestLayout ()
當(dāng)某些變更導(dǎo)致視圖的布局失效時(shí)調(diào)用該方法。該方法按照視圖樹的順序調(diào)用。
?
public void setColumnCollapsed (int columnIndex, boolean isCollapsed)
折疊或恢復(fù)給定列。折疊時(shí),列從屏幕上消失,其空間由其它列占用。 當(dāng)列屬于 TableRow
時(shí)才可以進(jìn)行折疊/恢復(fù)操作。
調(diào)用該方法會(huì)請(qǐng)求布局操作。
???????????????? 相關(guān)XML屬性
??? ?????????????????? android:collapseColumns
?????????????????? 參數(shù)
columnIndex ? 列索引
isCollapsed ??? 折疊時(shí)為true;否則為false
?
public void setColumnShrinkable (int columnIndex, boolean isShrinkable)
設(shè)置指定列是否可收縮。當(dāng)行太寬時(shí),表格可以收縮該列以提供更多空間。
調(diào)用該方法會(huì)請(qǐng)求布局操作。
?????????????????? 相關(guān)XML屬性
??????????????????????????? android:shrinkColumns
?????????????????? 參數(shù)
columnIndex ? 列索引
isShrinkable ?? 如果列可以收縮,設(shè)為真;否則設(shè)為假。默認(rèn)是假。
?
public void setColumnStretchable (int columnIndex, boolean isStretchable)
設(shè)置指定列是否可拉伸??衫鞎r(shí),列會(huì)盡可能多的占用行中的可用空間。
調(diào)用該方法會(huì)請(qǐng)求布局操作。
?????????????????? 相關(guān)XML屬性
??????????????????????????? android:stretchColumns
?????????????????? 參數(shù)
columnIndex ? 列索引
isStretchable 如果列可以拉伸,設(shè)為真;否則設(shè)為假.默認(rèn)是假
?
public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)
注冊(cè)當(dāng)從視圖中添加或移除子視圖時(shí)發(fā)生的回調(diào)函數(shù)。
?????????????????? 參數(shù)
listener ? 層次結(jié)構(gòu)變更時(shí)執(zhí)行的回調(diào)函數(shù)
?
public void setShrinkAllColumns (boolean shrinkAllColumns)
標(biāo)記所有列為可收縮的便利的方法。
?????????????????? 相關(guān)XML屬性
android:shrinkColumns
?????????????????? 參數(shù)
shrinkAllColumns ?? 如果標(biāo)記所有列為可收縮時(shí)為true
?
public void setStretchAllColumns (boolean stretchAllColumns)
標(biāo)記所有列為可拉伸的便利的方法。
?????????????????? 相關(guān)XML屬性
??????????????????????????? android:stretchColumns
?????????????????? 參數(shù)
stretchAllColumns ????????? 如果標(biāo)記所有列為可拉伸時(shí)為true
?
受保護(hù)方法
protected boolean checkLayoutParams (ViewGroup.LayoutParams p)
???????? (譯者注:檢測(cè)是不是AbsoluteLayout.LayoutParams的實(shí)例)
?
protected LinearLayout.LayoutParams generateDefaultLayoutParams ()
返回寬度為MATCH_PARENT
, 高度為WRAP_CONTENT
的布局參數(shù)集合。
?????????????????? 返回值
默認(rèn)布局參數(shù)集合或空
?
protected LinearLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
基于提供的布局參數(shù)返回一組安全的布局參數(shù)集合.當(dāng)傳入
ViewGroup 的視圖的參數(shù)沒有通過checkLayoutParams(android.view.ViewGroup.LayoutParams)
的檢測(cè)時(shí),調(diào)用該方法. 該方法會(huì)返回適合 ViewGroup 的新的布局參數(shù),可能從指定的布局參數(shù)中復(fù)制適當(dāng)?shù)膶傩浴?/span>
?????????????????? 參數(shù)
p ???? 要轉(zhuǎn)換為適合于 ViewGroup 的布局參數(shù)的集合
?????????????????? 返回值
??? ?????????????????? ViewGroup.LayoutParams
或其子類的實(shí)例
?
protected void onLayout (boolean changed, int l, int t, int r, int b)
該視圖設(shè)置其子視圖的大小及位置時(shí)調(diào)用.派生類可以重寫此方法,并為其子類布局。
?????????????????? 參數(shù)
changed ????????? 是否為視圖設(shè)置了新的大小和位置
l ????? 相對(duì)于父視圖的左側(cè)的位置
t ???? 相對(duì)于父視圖的頂部的位置
r ???? 相對(duì)于父視圖的右側(cè)的位置
b ???? 相對(duì)于父視圖的底部的位置
?
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
評(píng)估視圖及其內(nèi)容,以決定其寬度和高度.此方法由measure(int, int)
調(diào)用,子類可以重載以提供更精確、更有效率的衡量其內(nèi)容尺寸的方法。
約定: 覆蓋該方法時(shí),必須調(diào)用 setMeasuredDimension(int,
int)
方法來保存評(píng)估結(jié)果的視圖的寬度和高度.如果忘記將導(dǎo)致 measure(int,
int)
方法拋出IllegalStateException
異常.要有效的利用父類的onMeasure(int,
int)
方法。
基類測(cè)量的是背景的大小,除非 MeasureSpec 允許超過背景.子類應(yīng)該重寫 onMeasure(int,
int)
方法,以為其內(nèi)容提供更適合的大小。
如果重寫了該方法,子類要確保其高度和寬度大于等于視圖的最小高度和寬度. (getSuggestedMinimumHeight()
和 getSuggestedMinimumWidth()
)
?????????????????? 參數(shù)
widthMeasureSpec ??????? 父視圖要求的橫向空間大小.該要求由 View.MeasureSpec
進(jìn)行了編碼處理。
heightMeasureSpec ?????? 父視圖要求的縱向空間大小.該要求由 View.MeasureSpec
進(jìn)行了編碼處理。
?
補(bǔ)充
???????? 文章精選
?????????????????? Android UI學(xué)習(xí) - TableLayout
?