public class GridLayout
extends ViewGroup
java.lang.Object | |||
↳ | android.view.View | ||
↳ | android.view.ViewGroup | ||
↳ | android.support.v7.widget.GridLayout |
将子项放置在矩形 网格中的布局。
网格由一组无限细线组成,这些线将观看区域分隔成多个单元格 。 在整个API中,网格线被网格索引引用。 包含N
列的网格具有从0
至N
含)的N + 1
网格索引。 无论GridLayout如何配置,网格索引0
都固定在容器的前沿,而网格索引N
固定在其后沿(在考虑填充之后)。
rowSpec
and
columnSpec
layout parameters. Each spec defines the set of rows or columns that are to be occupied; and how children should be aligned within the resulting group of cells. Although cells do not normally overlap in a GridLayout, GridLayout does not prevent children being defined to occupy the same cell or group of cells. In this case however, there is no guarantee that children will not themselves overlap after the layout operation completes.
orientation
,
rowCount
and
columnCount
properties.
Space
view or by setting the
leftMargin
,
topMargin
,
rightMargin
and
bottomMargin
layout parameters. When the
useDefaultMargins
property is set, default margins around children are automatically allocated based on the prevailing UI style guide for the platform. Each of the margins so defined may be independently overridden by an assignment to the appropriate layout parameter. Default values will generally produce a reasonable spacing between components but values may change between different releases of the platform.
因此,视图的柔性通过其,反过来,通常通过设置限定其取向影响gravity
孩子的布局参数的属性。 如果沿给定轴定义重量或对齐方式,则该部件在该方向上被视为灵活 。 如果没有设置重量或对齐方式,则该组件被假定为不灵活 。
同一行或列组中的多个组件被认为是并行工作的 。 只有组件内的所有组件都是灵活的,这样的组才是灵活的。 而是将位于公共边界两侧的行和列组视为串联 。 如果其中一个元素具有灵活性,那么由这两个元素组成的复合组是灵活的。
为了使柱子伸展,确保它内部的所有组件都定义了重量或重力。 要防止色谱柱拉伸,请确保色谱柱中的某个组分未定义重量或重力。
当灵活性原则没有提供完全的消歧时,GridLayout的算法更偏向于靠近其右边和底边的行和列。 更确切地说,GridLayout将它的每个布局参数作为一组变量的约束条件,这些变量定义了给定轴上的网格线。 在布局过程中,GridLayout解决了约束条件,以便将唯一的解决方案返回到所有变量小于或等于所有其他有效解决方案中相应值的约束条件。
GONE
, as having zero width and height. This is subtly different from the policy of ignoring views that are marked as GONE outright. If, for example, a gone-marked view was alone in a column, that column would itself collapse to zero width if and only if no gravity was defined on the view. If gravity was defined, then the gone-marked view has no effect on the layout and the container should be laid out as if the view had never been added to it. GONE views are taken to have zero weight during excess space distribution.
这些语句同样适用于行和列,以及行或列的组。
有关GridLayout使用的布局参数的完整说明,请参阅 GridLayout.LayoutParams
。
Nested classes |
|
---|---|
class |
GridLayout.Alignment 对齐方式指定视图应放置在单元格组中的位置以及其大小。 |
class |
GridLayout.LayoutParams 布局信息与GridLayout的每个子节点相关联。 |
class |
GridLayout.Spec Spec规定了一组单元的水平或垂直特性。 |
Inherited XML attributes |
|
---|---|
From class android.view.ViewGroup
|
|
From class android.view.View
|
Constants |
|
---|---|
int |
ALIGN_BOUNDS 这个常数是 |
int |
ALIGN_MARGINS 这个常数是 |
int |
HORIZONTAL 水平方向。 |
int |
UNDEFINED 用于指示值未定义的常量。 |
int |
VERTICAL 垂直方向。 |
Inherited constants |
---|
From class android.view.ViewGroup
|
From class android.view.View
|
Fields |
|
---|---|
public static final GridLayout.Alignment |
BASELINE 指示视图应与其单元组中其他视图的 基线对齐。 |
public static final GridLayout.Alignment |
BOTTOM 指示视图应与其单元组中其他视图的 底部边缘对齐。 |
public static final GridLayout.Alignment |
CENTER 指示视图应该以其单元格组中的其他视图 为中心 。 |
public static final GridLayout.Alignment |
END 指示视图应与其单元组中其他视图的 末端边缘对齐。 |
public static final GridLayout.Alignment |
FILL 指示视图应该展开以适合其单元组的边界。 |
public static final GridLayout.Alignment |
LEFT 指示视图应与其单元格组中其他视图的 左边缘对齐。 |
public static final GridLayout.Alignment |
RIGHT 指示视图应与其单元格组中其他视图的 右边缘对齐。 |
public static final GridLayout.Alignment |
START 指示视图应该与其单元格组中其他视图的 起始边缘对齐。 |
public static final GridLayout.Alignment |
TOP 指示视图应与其单元格组中其他视图的 顶部边缘对齐。 |
Inherited fields |
---|
From class android.view.View
|
Public constructors |
|
---|---|
GridLayout(Context context, AttributeSet attrs, int defStyle) |
|
GridLayout(Context context, AttributeSet attrs) |
|
GridLayout(Context context) |
Public methods |
|
---|---|
GridLayout.LayoutParams |
generateLayoutParams(AttributeSet attrs) 根据提供的属性集返回一组新的布局参数。 |
int |
getAlignmentMode() 返回对齐模式。 |
int |
getColumnCount() 返回当前的列数。 |
int |
getOrientation() 返回当前的方向。 |
Printer |
getPrinter() 从此布局返回将记录诊断信息的打印机。 |
int |
getRowCount() 返回当前的行数。 |
boolean |
getUseDefaultMargins() 返回当没有定义相应的布局参数时,此GridLayout是否将分配默认边距。 |
boolean |
isColumnOrderPreserved() 返回列边界是否按其网格索引排序。 |
boolean |
isRowOrderPreserved() 返回行边界是否按其网格索引排序。 |
void |
requestLayout() 当事情发生变化时调用它,这已经使这个视图的布局无效。 |
void |
setAlignmentMode(int alignmentMode) 设置对齐模式以用于此容器的子项之间的所有对齐。 |
void |
setColumnCount(int columnCount) 当组件的布局参数未指定时,ColumnCount仅用于生成默认列/列索引。 |
void |
setColumnOrderPreserved(boolean columnOrderPreserved) 当此属性为 |
void |
setOrientation(int orientation) GridLayout使用orientation属性有两个目的:
|
void |
setPrinter(Printer printer) 设置将从此布局记录诊断的打印机。 |
void |
setRowCount(int rowCount) RowCount仅用于在组件的布局参数未指定它们时生成默认行/列索引。 |
void |
setRowOrderPreserved(boolean rowOrderPreserved) 当此属性为 |
void |
setUseDefaultMargins(boolean useDefaultMargins) 当 |
static GridLayout.Spec |
spec(int start, float weight) 相当于: |
static GridLayout.Spec |
spec(int start, int size, GridLayout.Alignment alignment) 相当于: |
static GridLayout.Spec |
spec(int start, GridLayout.Alignment alignment) 返回规格,
要使开始索引未定义,请使用值 |
static GridLayout.Spec |
spec(int start) 返回规格,
要使开始索引未定义,请使用值 |
static GridLayout.Spec |
spec(int start, int size, GridLayout.Alignment alignment, float weight) 返回规格,
要使开始索引未定义,请使用值 |
static GridLayout.Spec |
spec(int start, int size, float weight) 等同于: |
static GridLayout.Spec |
spec(int start, int size) 返回规格,
要使开始索引未定义,请使用值 |
static GridLayout.Spec |
spec(int start, GridLayout.Alignment alignment, float weight) 相当于: |
Protected methods |
|
---|---|
boolean |
checkLayoutParams(ViewGroup.LayoutParams p) |
GridLayout.LayoutParams |
generateDefaultLayoutParams() 返回一组默认布局参数。 |
GridLayout.LayoutParams |
generateLayoutParams(ViewGroup.LayoutParams lp) 根据提供的布局参数返回一组安全的布局参数。 |
void |
onLayout(boolean changed, int left, int top, int right, int bottom) 当这个视图为每个孩子分配一个大小和位置时,从布局调用。 |
void |
onMeasure(int widthSpec, int heightSpec) 测量视图及其内容以确定测量宽度和测量高度。 |
Inherited methods |
|
---|---|
From class android.view.ViewGroup
|
|
From class android.view.View
|
|
From class java.lang.Object
|
|
From interface android.view.ViewParent
|
|
From interface android.view.ViewManager
|
|
From interface android.graphics.drawable.Drawable.Callback
|
|
From interface android.view.KeyEvent.Callback
|
|
From interface android.view.accessibility.AccessibilityEventSource
|
int ALIGN_BOUNDS
这个常数是alignmentMode
。 当alignmentMode
设定为ALIGN_BOUNDS
,对准每种组分的原料视图边界的边缘之间进行:即,通过该组件的限定的区域: top
, left
, bottom
和right
性质。
例如,当 GridLayout
处于 ALIGN_BOUNDS
模式时,属于使用 TOP
对齐的行组的子 TOP
将在调用 getTop()
方法时全部返回相同的值。
也可以看看:
常量值:0(0x00000000)
int ALIGN_MARGINS
这个常数是alignmentMode
。 当alignmentMode
设置为ALIGN_MARGINS
,每个视图的边界根据其边距向外扩展,然后对齐所得矩形的边缘。
例如,当 GridLayout
处于 ALIGN_MARGINS
模式时,对于属于使用 TOP
对齐的行组的所有子级,数量 top - layoutParams.topMargin
都是相同的。
也可以看看:
常数值:1(0x00000001)
int HORIZONTAL
水平方向。
常量值:0(0x00000000)
int UNDEFINED
用于指示值未定义的常量。 字段可以使用此值来指示它们的值尚未设置。 同样,方法可以返回这个值来表明实现可以返回没有合适的值。 用于常量(当前为MIN_VALUE
)的值旨在避免标志可能MIN_VALUE
有效值之间的混淆。
常量值:-2147483648(0x80000000)
int VERTICAL
垂直方向。
常数值:1(0x00000001)
GridLayout (Context context, AttributeSet attrs, int defStyle)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
defStyle |
int
|
GridLayout (Context context, AttributeSet attrs)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
GridLayout.LayoutParams generateLayoutParams (AttributeSet attrs)
根据提供的属性集返回一组新的布局参数。
Parameters | |
---|---|
attrs |
AttributeSet : the attributes to build the layout parameters from |
Returns | |
---|---|
GridLayout.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
int getAlignmentMode ()
返回对齐模式。
Returns | |
---|---|
int |
the alignment mode; either ALIGN_BOUNDS or ALIGN_MARGINS |
int getColumnCount ()
返回当前的列数。 这是setColumnCount(int)
设置的最后一个值,或者如果没有设置此值, columnSpec
定义的每个上限的columnSpec
。
Returns | |
---|---|
int |
the current number of columns |
也可以看看:
Printer getPrinter ()
从此布局返回将记录诊断信息的打印机。
Returns | |
---|---|
Printer |
the printer associated with this view |
int getRowCount ()
返回当前的行数。 这是用setRowCount(int)
设置的最后一个值,或者如果没有设置这样的值,则是rowSpec
定义的每个上限的rowSpec
。
Returns | |
---|---|
int |
the current number of rows |
也可以看看:
boolean getUseDefaultMargins ()
返回当没有定义相应的布局参数时,此GridLayout是否将分配默认边距。
Returns | |
---|---|
boolean |
true if default margins should be allocated |
boolean isColumnOrderPreserved ()
返回列边界是否按其网格索引排序。
Returns | |
---|---|
boolean |
true if column boundaries must appear in the order of their indices, false otherwise |
boolean isRowOrderPreserved ()
返回行边界是否按其网格索引排序。
Returns | |
---|---|
boolean |
true if row boundaries must appear in the order of their indices, false otherwise |
void requestLayout ()
当事情发生变化时调用它,这已经使这个视图的布局无效。 这将安排视图树的布局传递。 当视图层次结构当前处于布局传递状态时( isInLayout()
不应该调用此视图层次结构( isInLayout()
。如果发生布局,则可以在当前布局传递结束时(然后布局将再次运行)或当前帧结束后绘制并发生下一个布局。
覆盖此方法的子类应调用超类方法以正确处理可能的布局错误请求。
void setAlignmentMode (int alignmentMode)
设置对齐模式以用于此容器的子项之间的所有对齐。
此属性的默认值是 ALIGN_MARGINS
。
Parameters | |
---|---|
alignmentMode |
int : either ALIGN_BOUNDS or ALIGN_MARGINS |
void setColumnCount (int columnCount)
当组件的布局参数未指定时,ColumnCount仅用于生成默认列/列索引。
Parameters | |
---|---|
columnCount |
int : the number of columns. |
也可以看看:
void setColumnOrderPreserved (boolean columnOrderPreserved)
当此属性为 true
,GridLayout被迫放置列边界,以便它们的 true
在视图中以升序排列。
当此属性为 false
GridLayout可自由将水平列的边界以任何最适合给定约束的顺序放置。
此属性的默认值是 true
。
Parameters | |
---|---|
columnOrderPreserved |
boolean : use true to force GridLayout to respect the order of column boundaries. |
也可以看看:
void setOrientation (int orientation)
GridLayout使用orientation属性有两个目的:
HORIZONTAL
the horizontal axis is laid out first. 如果您的布局包含 TextView
(或衍生物: Button
, EditText
, CheckBox
,等等),这是在多行模式(默认),它通常最好是离开网格布局的方向为 HORIZONTAL
-因为 TextView
能够取得其高度的一个给定的宽度,但不是相反的方式。
除上述效果外,方向不会影响GridLayout的实际布局操作,因此即使预期布局的高度大大超过其宽度,也可以将GridLayout保持为 HORIZONTAL
模式。
此属性的默认值是 HORIZONTAL
。
Parameters | |
---|---|
orientation |
int : either HORIZONTAL or VERTICAL |
也可以看看:
void setPrinter (Printer printer)
设置将从此布局记录诊断的打印机。 默认值由LogPrinter
创建。
Parameters | |
---|---|
printer |
Printer : the printer associated with this layout |
也可以看看:
void setRowCount (int rowCount)
RowCount仅用于在组件的布局参数未指定它们时生成默认行/列索引。
Parameters | |
---|---|
rowCount |
int : the number of rows |
也可以看看:
void setRowOrderPreserved (boolean rowOrderPreserved)
当此属性为 true
,GridLayout被迫放置行边界,以便它们的 true
在视图中以升序排列。
当此属性为 false
GridLayout可自由将垂直行边界以任何最适合给定约束的顺序放置。
此属性的默认值是 true
。
Parameters | |
---|---|
rowOrderPreserved |
boolean : true to force GridLayout to respect the order of row boundaries |
也可以看看:
void setUseDefaultMargins (boolean useDefaultMargins)
当true
,GridLayout根据孩子的视觉特征为儿童分配默认边距。 如此定义的每个边距可以通过对相应布局参数的分配而被独立地覆盖。
当 false
,所有边距的默认值为零。
设置为 true
,请考虑将 alignmentMode
属性的值设置为 ALIGN_BOUNDS
。
该属性的默认值是 false
。
Parameters | |
---|---|
useDefaultMargins |
boolean : use true to make GridLayout allocate default margins |
GridLayout.Spec spec (int start, float weight)
相当于: spec(start, 1, weight)
。
Parameters | |
---|---|
start |
int : the start |
weight |
float : the weight |
Returns | |
---|---|
GridLayout.Spec |
GridLayout.Spec spec (int start, int size, GridLayout.Alignment alignment)
相当于: spec(start, size, alignment, 0f)
。
Parameters | |
---|---|
start |
int : the start |
size |
int : the size |
alignment |
GridLayout.Alignment : the alignment |
Returns | |
---|---|
GridLayout.Spec |
GridLayout.Spec spec (int start, GridLayout.Alignment alignment)
返回规格, spec
,其中:
spec.span = [start, start + 1]
spec.alignment = alignment
要使开始索引未定义,请使用值 UNDEFINED
。
Parameters | |
---|---|
start |
int : the start index |
alignment |
GridLayout.Alignment : the alignment |
Returns | |
---|---|
GridLayout.Spec |
也可以看看:
GridLayout.Spec spec (int start)
返回规格, spec
,其中:
spec.span = [start, start + 1]
要使开始索引未定义,请使用值 UNDEFINED
。
Parameters | |
---|---|
start |
int : the start index |
Returns | |
---|---|
GridLayout.Spec |
也可以看看:
GridLayout.Spec spec (int start, int size, GridLayout.Alignment alignment, float weight)
返回规格, spec
,其中:
spec.span = [start, start + size]
spec.alignment = alignment
spec.weight = weight
要使开始索引未定义,请使用值 UNDEFINED
。
Parameters | |
---|---|
start |
int : the start |
size |
int : the size |
alignment |
GridLayout.Alignment : the alignment |
weight |
float : the weight |
Returns | |
---|---|
GridLayout.Spec |
GridLayout.Spec spec (int start, int size, float weight)
等同于: spec(start, 1, default_alignment, weight)
-在 default_alignment
在指定 GridLayout.LayoutParams
。
Parameters | |
---|---|
start |
int : the start |
size |
int : the size |
weight |
float : the weight |
Returns | |
---|---|
GridLayout.Spec |
GridLayout.Spec spec (int start, int size)
返回规格, spec
,其中:
spec.span = [start, start + size]
要使开始索引未定义,请使用值 UNDEFINED
。
Parameters | |
---|---|
start |
int : the start |
size |
int : the size |
Returns | |
---|---|
GridLayout.Spec |
也可以看看:
GridLayout.Spec spec (int start, GridLayout.Alignment alignment, float weight)
相当于: spec(start, 1, alignment, weight)
。
Parameters | |
---|---|
start |
int : the start |
alignment |
GridLayout.Alignment : the alignment |
weight |
float : the weight |
Returns | |
---|---|
GridLayout.Spec |
boolean checkLayoutParams (ViewGroup.LayoutParams p)
Parameters | |
---|---|
p |
ViewGroup.LayoutParams
|
Returns | |
---|---|
boolean |
GridLayout.LayoutParams generateDefaultLayoutParams ()
返回一组默认布局参数。 当传递给addView(View)
的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。
Returns | |
---|---|
GridLayout.LayoutParams |
a set of default layout parameters or null |
GridLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams lp)
根据提供的布局参数返回一组安全的布局参数。 当一个ViewGroup传递一个View,其布局参数不能通过checkLayoutParams(android.view.ViewGroup.LayoutParams)
的测试时,这个方法被调用。 此方法应该返回一组适合此ViewGroup的布局参数,可能是通过从指定的一组布局参数中复制适当的属性。
Parameters | |
---|---|
lp |
ViewGroup.LayoutParams : The layout parameters to convert into a suitable set of layout parameters for this ViewGroup. |
Returns | |
---|---|
GridLayout.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
void onLayout (boolean changed, int left, int top, int right, int bottom)
当这个视图为每个孩子分配一个大小和位置时,从布局调用。 带孩子的派生类应该覆盖这个方法,并调用他们每个孩子的布局。
Parameters | |
---|---|
changed |
boolean : This is a new size or position for this view |
left |
int : Left position, relative to parent |
top |
int : Top position, relative to parent |
right |
int : Right position, relative to parent |
bottom |
int : Bottom position, relative to parent |
void onMeasure (int widthSpec, int heightSpec)
测量视图及其内容以确定测量宽度和测量高度。 此方法由measure(int, int)
调用, measure(int, int)
子类覆盖以提供其内容的准确和有效的度量。
合同:覆盖此方法时, 必须致电setMeasuredDimension(int, int)
来存储此视图的测量宽度和高度。 不这样做会触发IllegalStateException
,由measure(int, int)
抛出。 调用超类' onMeasure(int, int)
是一种有效的用法。
Measure的基类实现默认为背景大小,除非MeasureSpec允许更大的大小。 子类应该覆盖onMeasure(int, int)
以提供更好的内容度量。
如果此方法被覆盖,则子类的责任是确保测量的高度和宽度至少为视图的最小高度和宽度( getSuggestedMinimumHeight()
和 getSuggestedMinimumWidth()
)。
Parameters | |
---|---|
widthSpec |
int : horizontal space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec . |
heightSpec |
int : vertical space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec . |