Most visited

Recently visited

GridLayout

public class GridLayout
extends ViewGroup

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.support.v7.widget.GridLayout


将子项放置在矩形 网格中的布局。

网格由一组无限细线组成,这些线将观看区域分隔成多个单元格 在整个API中,网格线被网格索引引用。 包含N列的网格具有从0N含)的N + 1网格索引。 无论GridLayout如何配置,网格索引0都固定在容器的前沿,而网格索引N固定在其后沿(在考虑填充之后)。

Row and Column Specs

Children occupy one or more contiguous cells, as defined by their 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.

Default Cell Assignment

If a child does not specify the row and column indices of the cell it wishes to occupy, GridLayout assigns cell locations automatically using its: orientation, rowCount and columnCount properties.

Space

Space between children may be specified either by using instances of the dedicated 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.

Excess Space Distribution

GridLayout's distribution of excess space accommodates the principle of weight. In the event that no weights are specified, columns and rows are taken as flexible if their views specify some form of alignment within their groups.

因此,视图的柔性通过其,反过来,通常通过设置限定其取向影响gravity孩子的布局参数的属性。 如果沿给定轴定义重量或对齐方式,则该部件在该方向上被视为灵活 如果没有设置重量或对齐方式,则该组件被假定为不灵活

同一行或列组中的多个组件被认为是并行工作的 只有组件内的所有组件都是灵活的,这样的组才是灵活的。 而是将位于公共边界两侧的行和列组视为串联 如果其中一个元素具有灵活性,那么由这两个元素组成的复合组是灵活的。

为了使柱子伸展,确保它内部的所有组件都定义了重量或重力。 要防止色谱柱拉伸,请确保色谱柱中的某个组分未定义重量或重力。

当灵活性原则没有提供完全的消歧时,GridLayout的算法更偏向于靠近其右边底边的行和列。 更确切地说,GridLayout将它的每个布局参数作为一组变量的约束条件,这些变量定义了给定轴上的网格线。 在布局过程中,GridLayout解决了约束条件,以便将唯一的解决方案返回到所有变量小于或等于所有其他有效解决方案中相应值的约束条件。

Interpretation of GONE

For layout purposes, GridLayout treats views whose visibility status is 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

Summary

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

这个常数是 alignmentMode

int ALIGN_MARGINS

这个常数是 alignmentMode

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)

当此属性为 true ,GridLayout被迫放置列边界,以使它们的 true在视图中以升序排列。

void setOrientation(int orientation)

GridLayout使用orientation属性有两个目的:

  • To control the 'direction' in which default row/column indices are generated when they are not specified in a component's layout parameters.

void setPrinter(Printer printer)

设置将从此布局记录诊断的打印机。

void setRowCount(int rowCount)

RowCount仅用于在组件的布局参数未指定它们时生成默认行/列索引。

void setRowOrderPreserved(boolean rowOrderPreserved)

当此属性为 true ,GridLayout被迫放置行边界,以便它们的 true在视图中以升序排列。

void setUseDefaultMargins(boolean useDefaultMargins)

true ,GridLayout根据孩子的视觉特性为儿童分配默认边距。

static GridLayout.Spec spec(int start, float weight)

相当于: spec(start, 1, weight)

static GridLayout.Spec spec(int start, int size, GridLayout.Alignment alignment)

相当于: spec(start, size, alignment, 0f)

static GridLayout.Spec spec(int start, GridLayout.Alignment alignment)

返回规格, spec ,其中:

  • spec.span = [start, start + 1]
  • spec.alignment = alignment

要使开始索引未定义,请使用值 UNDEFINED

static GridLayout.Spec spec(int start)

返回规格, spec ,其中:

  • spec.span = [start, start + 1]

要使开始索引未定义,请使用值 UNDEFINED

static 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

static GridLayout.Spec spec(int start, int size, float weight)

等同于: spec(start, 1, default_alignment, weight) -在 default_alignment在指定 GridLayout.LayoutParams

static GridLayout.Spec spec(int start, int size)

返回规格, spec ,其中:

  • spec.span = [start, start + size]

要使开始索引未定义,请使用值 UNDEFINED

static GridLayout.Spec spec(int start, GridLayout.Alignment alignment, float weight)

相当于: spec(start, 1, alignment, 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

Constants

ALIGN_BOUNDS

int ALIGN_BOUNDS

这个常数是alignmentMode alignmentMode设定为ALIGN_BOUNDS ,对准每种组分的原料视图边界的边缘之间进行:即,通过该组件的限定的区域: topleftbottomright性质。

例如,当 GridLayout处于 ALIGN_BOUNDS模式时,属于使用 TOP对齐的行组的子 TOP将在调用 getTop()方法时全部返回相同的值。

也可以看看:

常量值:0(0x00000000)

ALIGN_MARGINS

int ALIGN_MARGINS

这个常数是alignmentMode alignmentMode设置为ALIGN_MARGINS ,每个视图的边界根据其边距向外扩展,然后对齐所得矩形的边缘。

例如,当 GridLayout处于 ALIGN_MARGINS模式时,对于属于使用 TOP对齐的行组的所有子级,数量 top - layoutParams.topMargin都是相同的。

也可以看看:

常数值:1(0x00000001)

HORIZONTAL

int HORIZONTAL

水平方向。

常量值:0(0x00000000)

UNDEFINED

int UNDEFINED

用于指示值未定义的常量。 字段可以使用此值来指示它们的值尚未设置。 同样,方法可以返回这个值来表明实现可以返回没有合适的值。 用于常量(当前为MIN_VALUE )的值旨在避免标志可能MIN_VALUE有效值之间的混淆。

常量值:-2147483648(0x80000000)

VERTICAL

int VERTICAL

垂直方向。

常数值:1(0x00000001)

Fields

BASELINE

GridLayout.Alignment BASELINE

指示视图应与其单元组中其他视图的基线对齐。 此常数只能用作rowSpecs的对齐rowSpecs

也可以看看:

BOTTOM

GridLayout.Alignment BOTTOM

指示视图应与其单元组中其他视图的 底部边缘对齐。

CENTER

GridLayout.Alignment CENTER

指示视图应该以其单元格组中的其他视图为中心 该常数可用于rowSpecscolumnSpecs

END

GridLayout.Alignment END

指示视图应与其单元组中其他视图的 末端边缘对齐。

FILL

GridLayout.Alignment FILL

指示视图应该展开以适合其单元组的边界。 该常数可用于rowSpecscolumnSpecs

LEFT

GridLayout.Alignment LEFT

指示视图应与其单元格组中其他视图的 边缘对齐。

RIGHT

GridLayout.Alignment RIGHT

指示视图应与其单元格组中其他视图的 边缘对齐。

START

GridLayout.Alignment START

指示视图应该与其单元格组中其他视图的 起始边缘对齐。

TOP

GridLayout.Alignment TOP

指示视图应与其单元格组中其他视图的 顶部边缘对齐。

Public constructors

GridLayout

GridLayout (Context context, 
                AttributeSet attrs, 
                int defStyle)

Parameters
context Context
attrs AttributeSet
defStyle int

GridLayout

GridLayout (Context context, 
                AttributeSet attrs)

Parameters
context Context
attrs AttributeSet

GridLayout

GridLayout (Context context)

Parameters
context Context

Public methods

generateLayoutParams

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

getAlignmentMode

int getAlignmentMode ()

返回对齐模式。

Returns
int the alignment mode; either ALIGN_BOUNDS or ALIGN_MARGINS

也可以看看:

getColumnCount

int getColumnCount ()

返回当前的列数。 这是setColumnCount(int)设置的最后一个值,或者如果没有设置此值, columnSpec定义的每个上限的columnSpec

Returns
int the current number of columns

也可以看看:

getOrientation

int getOrientation ()

返回当前的方向。

Returns
int either HORIZONTAL or VERTICAL

也可以看看:

getPrinter

Printer getPrinter ()

从此布局返回将记录诊断信息的打印机。

Returns
Printer the printer associated with this view

也可以看看:

getRowCount

int getRowCount ()

返回当前的行数。 这是用setRowCount(int)设置的最后一个值,或者如果没有设置这样的值,则是rowSpec定义的每个上限的rowSpec

Returns
int the current number of rows

也可以看看:

getUseDefaultMargins

boolean getUseDefaultMargins ()

返回当没有定义相应的布局参数时,此GridLayout是否将分配默认边距。

Returns
boolean true if default margins should be allocated

也可以看看:

isColumnOrderPreserved

boolean isColumnOrderPreserved ()

返回列边界是否按其网格索引排序。

Returns
boolean true if column boundaries must appear in the order of their indices, false otherwise

也可以看看:

isRowOrderPreserved

boolean isRowOrderPreserved ()

返回行边界是否按其网格索引排序。

Returns
boolean true if row boundaries must appear in the order of their indices, false otherwise

也可以看看:

requestLayout

void requestLayout ()

当事情发生变化时调用它,这已经使这个视图的布局无效。 这将安排视图树的布局传递。 当视图层次结构当前处于布局传递状态时( isInLayout()不应该调用此视图层次结构( isInLayout() 。如果发生布局,则可以在当前布局传递结束时(然后布局将再次运行)或当前帧结束后绘制并发生下一个布局。

覆盖此方法的子类应调用超类方法以正确处理可能的布局错误请求。

setAlignmentMode

void setAlignmentMode (int alignmentMode)

设置对齐模式以用于此容器的子项之间的所有对齐。

此属性的默认值是 ALIGN_MARGINS

Parameters
alignmentMode int: either ALIGN_BOUNDS or ALIGN_MARGINS

也可以看看:

setColumnCount

void setColumnCount (int columnCount)

当组件的布局参数未指定时,ColumnCount仅用于生成默认列/列索引。

Parameters
columnCount int: the number of columns.

也可以看看:

setColumnOrderPreserved

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.

也可以看看:

setOrientation

void setOrientation (int orientation)

GridLayout使用orientation属性有两个目的:

  • To control the 'direction' in which default row/column indices are generated when they are not specified in a component's layout parameters.
  • To control which axis should be processed first during the layout operation: when orientation is HORIZONTAL the horizontal axis is laid out first.
The order in which axes are laid out is important if, for example, the height of one of GridLayout's children is dependent on its width - and its width is, in turn, dependent on the widths of other components.

如果您的布局包含 TextView (或衍生物: ButtonEditTextCheckBox ,等等),这是在多行模式(默认),它通常最好是离开网格布局的方向为 HORIZONTAL -因为 TextView能够取得其高度的一个给定的宽度,但不是相反的方式。

除上述效果外,方向不会影响GridLayout的实际布局操作,因此即使预期布局的高度大大超过其宽度,也可以将GridLayout保持为 HORIZONTAL模式。

此属性的默认值是 HORIZONTAL

Parameters
orientation int: either HORIZONTAL or VERTICAL

也可以看看:

setPrinter

void setPrinter (Printer printer)

设置将从此布局记录诊断的打印机。 默认值由LogPrinter创建。

Parameters
printer Printer: the printer associated with this layout

也可以看看:

setRowCount

void setRowCount (int rowCount)

RowCount仅用于在组件的布局参数未指定它们时生成默认行/列索引。

Parameters
rowCount int: the number of rows

也可以看看:

setRowOrderPreserved

void setRowOrderPreserved (boolean rowOrderPreserved)

当此属性为 true ,GridLayout被迫放置行边界,以便它们的 true在视图中以升序排列。

当此属性为 false GridLayout可自由将垂直行边界以任何最适合给定约束的顺序放置。

此属性的默认值是 true

Parameters
rowOrderPreserved boolean: true to force GridLayout to respect the order of row boundaries

也可以看看:

setUseDefaultMargins

void setUseDefaultMargins (boolean useDefaultMargins)

true ,GridLayout根据孩子的视觉特征为儿童分配默认边距。 如此定义的每个边距可以通过对相应布局参数的分配而被独立地覆盖。

false ,所有边距的默认值为零。

设置为 true ,请考虑将 alignmentMode属性的值设置为 ALIGN_BOUNDS

该属性的默认值是 false

Parameters
useDefaultMargins boolean: use true to make GridLayout allocate default margins

也可以看看:

spec

GridLayout.Spec spec (int start, 
                float weight)

相当于: spec(start, 1, weight)

Parameters
start int: the start
weight float: the weight
Returns
GridLayout.Spec

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

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

也可以看看:

spec

GridLayout.Spec spec (int start)

返回规格, spec ,其中:

  • spec.span = [start, start + 1]

要使开始索引未定义,请使用值 UNDEFINED

Parameters
start int: the start index
Returns
GridLayout.Spec

也可以看看:

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

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

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

也可以看看:

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

Protected methods

checkLayoutParams

boolean checkLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams
Returns
boolean

generateDefaultLayoutParams

GridLayout.LayoutParams generateDefaultLayoutParams ()

返回一组默认布局参数。 当传递给addView(View)的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。

Returns
GridLayout.LayoutParams a set of default layout parameters or null

generateLayoutParams

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

onLayout

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

onMeasure

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.

Hooray!