Most visited

Recently visited

GridLayoutManager

public class GridLayoutManager
extends LinearLayoutManager

java.lang.Object
   ↳ android.support.v7.widget.RecyclerView.LayoutManager
     ↳ android.support.v7.widget.LinearLayoutManager
       ↳ android.support.v7.widget.GridLayoutManager


在网格中展示项目的 RecyclerView.LayoutManager实现。

默认情况下,每个项目占用1个跨度。 您可以通过setSpanSizeLookup(SpanSizeLookup)提供自定义GridLayoutManager.SpanSizeLookup实例来更改它。

Summary

Nested classes

class GridLayoutManager.DefaultSpanSizeLookup

默认实现GridLayoutManager.SpanSizeLookup

class GridLayoutManager.LayoutParams

GridLayoutManager使用的LayoutParams。

class GridLayoutManager.SpanSizeLookup

帮助类提供每个项目占用的跨度数量。

XML attributes

android.support.v7.recyclerview:spanCount  

Inherited XML attributes

From class android.support.v7.widget.LinearLayoutManager
From class android.support.v7.widget.RecyclerView.LayoutManager

Constants

int DEFAULT_SPAN_COUNT

Inherited constants

From class android.support.v7.widget.LinearLayoutManager

Public constructors

GridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

当布局管理器由RecyclerView属性“layoutManager”设置为XML时使用的构造器。

GridLayoutManager(Context context, int spanCount)

创建一个垂直的GridLayoutManager

GridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout)

Public methods

boolean checkLayoutParams(RecyclerView.LayoutParams lp)

确定提供的LayoutParams对象的有效性。

RecyclerView.LayoutParams generateDefaultLayoutParams()

为RecyclerView的子项创建默认的 LayoutParams对象。

RecyclerView.LayoutParams generateLayoutParams(Context c, AttributeSet attrs)

从膨胀的布局资源中创建适合此LayoutManager的LayoutParams对象。

RecyclerView.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp)

如果可能,创建一个适用于此LayoutManager的LayoutParams对象,从所提供的LayoutParams对象中复制相关值。

int getColumnCountForAccessibility(RecyclerView.Recycler recycler, RecyclerView.State state)

返回可访问性的列数。

int getRowCountForAccessibility(RecyclerView.Recycler recycler, RecyclerView.State state)

返回可访问性的行数。

int getSpanCount()

返回此网格布置的跨度数。

GridLayoutManager.SpanSizeLookup getSpanSizeLookup()

返回GridLayoutManager使用的当前 GridLayoutManager.SpanSizeLookup

View onFocusSearchFailed(View focused, int focusDirection, RecyclerView.Recycler recycler, RecyclerView.State state)

当在给定方向上搜索可聚焦视图时调用RecyclerView的当前内容失败。

void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler, RecyclerView.State state, View host, AccessibilityNodeInfoCompat info)

当应该填充特定项目的可访问性信息时,由AccessibilityDelegate调用。

void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount)

当项目已添加到适配器时调用。

void onItemsChanged(RecyclerView recyclerView)

notifyDataSetChanged()被触发时调用,而不是提供实际更改内容的详细信息。

void onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount)

在使用适配器移动项目时调用。

void onItemsRemoved(RecyclerView recyclerView, int positionStart, int itemCount)

当从适配器中移除项目时调用。

void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount, Object payload)

当适配器和可选有效载荷中的项目已更改时调用。

void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state)

从给定的适配器中布置所有相关的子视图。

void onLayoutCompleted(RecyclerView.State state)

完整布局计算完成后调用。

int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state)

以屏幕坐标中的dx像素水平滚动并返回行进的距离。

int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state)

在屏幕坐标中垂直滚动dy像素并返回行进的距离。

void setMeasuredDimension(Rect childrenBounds, int wSpec, int hSpec)

设置儿童给定边界框的测量尺寸和传递到 onMeasure(int, int)的测量规格。

void setSpanCount(int spanCount)

设置要布置的跨度数。

void setSpanSizeLookup(GridLayoutManager.SpanSizeLookup spanSizeLookup)

设置源以获取适配器中每个项目占用的跨度数。

void setStackFromEnd(boolean stackFromEnd)

GridLayoutManager不支持stackFromEnd。

boolean supportsPredictiveItemAnimations()

返回此LayoutManager是否支持自动项目动画。

Inherited methods

From class android.support.v7.widget.LinearLayoutManager
From class android.support.v7.widget.RecyclerView.LayoutManager
From class java.lang.Object
From interface android.support.v7.widget.helper.ItemTouchHelper.ViewDropHandler

XML attributes

android.support.v7.recyclerview:spanCount

相关方法:

Constants

DEFAULT_SPAN_COUNT

int DEFAULT_SPAN_COUNT

常量值:-1(0xffffffff)

Public constructors

GridLayoutManager

GridLayoutManager (Context context, 
                AttributeSet attrs, 
                int defStyleAttr, 
                int defStyleRes)

当布局管理器由RecyclerView属性“layoutManager”设置为XML时使用的构造器。 如果未在XML中指定spanCount,则默认为单列。

相关XML属性:

Parameters
context Context
attrs AttributeSet
defStyleAttr int
defStyleRes int

GridLayoutManager

GridLayoutManager (Context context, 
                int spanCount)

创建一个垂直的GridLayoutManager

Parameters
context Context: Current context, will be used to access resources.
spanCount int: The number of columns in the grid

GridLayoutManager

GridLayoutManager (Context context, 
                int spanCount, 
                int orientation, 
                boolean reverseLayout)

Parameters
context Context: Current context, will be used to access resources.
spanCount int: The number of columns or rows in the grid
orientation int: Layout orientation. Should be HORIZONTAL or VERTICAL.
reverseLayout boolean: When set to true, layouts from end to start.

Public methods

checkLayoutParams

boolean checkLayoutParams (RecyclerView.LayoutParams lp)

确定提供的LayoutParams对象的有效性。

这应该检查以确保对象是正确的类型,并且所有值都在可接受的范围内。 对于非空参数,默认实现返回true

Parameters
lp RecyclerView.LayoutParams: LayoutParams object to check
Returns
boolean true if this LayoutParams object is valid, false otherwise

generateDefaultLayoutParams

RecyclerView.LayoutParams generateDefaultLayoutParams ()

为RecyclerView的孩子创建一个默认的 LayoutParams对象。

LayoutManagers通常会使用自定义LayoutParams类型来存储特定于布局的额外信息。 客户端代码应为此目的RecyclerView.LayoutParams

重要提示:如果您使用自己定制的 LayoutParams类型,你还必须重写 checkLayoutParams(LayoutParams)generateLayoutParams(android.view.ViewGroup.LayoutParams)generateLayoutParams(android.content.Context, android.util.AttributeSet)

Returns
RecyclerView.LayoutParams A new LayoutParams for a child view

generateLayoutParams

RecyclerView.LayoutParams generateLayoutParams (Context c, 
                AttributeSet attrs)

从膨胀的布局资源中创建适合此LayoutManager的LayoutParams对象。

重要提示:如果您使用自己定制的 LayoutParams类型,你还必须重写 checkLayoutParams(LayoutParams)generateLayoutParams(android.view.ViewGroup.LayoutParams)generateLayoutParams(android.content.Context, android.util.AttributeSet)

Parameters
c Context: Context for obtaining styled attributes
attrs AttributeSet: AttributeSet describing the supplied arguments
Returns
RecyclerView.LayoutParams a new LayoutParams object

generateLayoutParams

RecyclerView.LayoutParams generateLayoutParams (ViewGroup.LayoutParams lp)

如果可能,创建一个适用于此LayoutManager的LayoutParams对象,从所提供的LayoutParams对象中复制相关值。

重要提示:如果您使用自己定制的 LayoutParams类型,你还必须重写 checkLayoutParams(LayoutParams)generateLayoutParams(android.view.ViewGroup.LayoutParams)generateLayoutParams(android.content.Context, android.util.AttributeSet)

Parameters
lp ViewGroup.LayoutParams: Source LayoutParams object to copy values from
Returns
RecyclerView.LayoutParams a new LayoutParams object

getColumnCountForAccessibility

int getColumnCountForAccessibility (RecyclerView.Recycler recycler, 
                RecyclerView.State state)

返回可访问性的列数。

如果LayoutManager支持水平滚动,则默认实现返回适配器中的项目数,如果LayoutManager不支持水平滚动,则返回1。

Parameters
recycler RecyclerView.Recycler: The Recycler that can be used to convert view positions into adapter positions
state RecyclerView.State: The current state of RecyclerView
Returns
int The number of rows in LayoutManager for accessibility.

getRowCountForAccessibility

int getRowCountForAccessibility (RecyclerView.Recycler recycler, 
                RecyclerView.State state)

返回可访问性的行数。

如果LayoutManager支持垂直滚动,则默认实现返回适配器中的项目数,如果LayoutManager不支持垂直滚动,则返回1。

Parameters
recycler RecyclerView.Recycler: The Recycler that can be used to convert view positions into adapter positions
state RecyclerView.State: The current state of RecyclerView
Returns
int The number of rows in LayoutManager for accessibility.

getSpanCount

int getSpanCount ()

返回此网格布置的跨度数。

Returns
int The number of spans

也可以看看:

getSpanSizeLookup

GridLayoutManager.SpanSizeLookup getSpanSizeLookup ()

返回GridLayoutManager使用的当前 GridLayoutManager.SpanSizeLookup

Returns
GridLayoutManager.SpanSizeLookup The current GridLayoutManager.SpanSizeLookup used by the GridLayoutManager.

onFocusSearchFailed

View onFocusSearchFailed (View focused, 
                int focusDirection, 
                RecyclerView.Recycler recycler, 
                RecyclerView.State state)

当在给定方向上搜索可聚焦视图时调用RecyclerView的当前内容失败。

这是LayoutManager在给定方向上填充视图以满足请求的机会(如果可以)。 LayoutManager应该附加并返回要聚焦的视图。 默认实现返回null。

Parameters
focused View: The currently focused view
focusDirection int: One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_BACKWARD, FOCUS_FORWARD or 0 for not applicable
recycler RecyclerView.Recycler: The recycler to use for obtaining views for currently offscreen items
state RecyclerView.State: Transient state of RecyclerView
Returns
View The chosen view to be focused

onInitializeAccessibilityNodeInfoForItem

void onInitializeAccessibilityNodeInfoForItem (RecyclerView.Recycler recycler, 
                RecyclerView.State state, 
                View host, 
                AccessibilityNodeInfoCompat info)

当应该填充特定项目的可访问性信息时,由AccessibilityDelegate调用。

默认实现添加有关该项目的基本定位信息。

Parameters
recycler RecyclerView.Recycler: The Recycler that can be used to convert view positions into adapter positions
state RecyclerView.State: The current state of RecyclerView
host View: The child for which accessibility node info should be populated
info AccessibilityNodeInfoCompat: The info to fill out about the item

onItemsAdded

void onItemsAdded (RecyclerView recyclerView, 
                int positionStart, 
                int itemCount)

当项目已添加到适配器时调用。 如果插入的项目需要刷新当前可见的一组子视图,则LayoutManager可以选择requestLayout。 (例如,当前空白空间将由附加项目填充等)

onItemsChanged

void onItemsChanged (RecyclerView recyclerView)

notifyDataSetChanged()被触发时调用,而不是提供有关实际更改内容的详细信息。

onItemsMoved

void onItemsMoved (RecyclerView recyclerView, 
                int from, 
                int to, 
                int itemCount)

在使用适配器移动项目时调用。

请注意,一个项目也可能会改变位置以响应另一个ADD / REMOVE / MOVE操作。 此回调仅在调用notifyItemMoved(int, int)调用。

onItemsRemoved

void onItemsRemoved (RecyclerView recyclerView, 
                int positionStart, 
                int itemCount)

当从适配器中移除项目时调用。

onItemsUpdated

void onItemsUpdated (RecyclerView recyclerView, 
                int positionStart, 
                int itemCount, 
                Object payload)

当适配器和可选有效载荷中的项目已更改时调用。 默认实现调用onItemsUpdated(RecyclerView, int, int)

onLayoutChildren

void onLayoutChildren (RecyclerView.Recycler recycler, 
                RecyclerView.State state)

从给定的适配器中布置所有相关的子视图。 LayoutManager负责项目动画的行为。 默认情况下,RecyclerView具有非空值ItemAnimator ,并且启用简单的项目动画。 这意味着对适配器的添加/删除操作将导致动画添加新的或出现的项目,删除或消失的项目以及移动的项目。 如果LayoutManager从supportsPredictiveItemAnimations() (默认值)返回false,并在onLayoutChildren(Recycler, State)期间运行正常的布局操作,则RecyclerView将具有足够的信息以简单的方式运行这些动画。 例如,默认的ItemAnimator, DefaultItemAnimator ,只是淡入淡出视图,无论它们是实际添加/删除还是由于其他添加/删除操作而在屏幕上移动或移出。

一个LayoutManager想要一个更好的项目动漫体验,其中的项目可以是动画上,并根据当他们在屏幕上不存在在那里的项目关闭屏幕,则LayoutManager随后应返回true supportsPredictiveItemAnimations() ,并添加额外的逻辑来onLayoutChildren(Recycler, State) 支持预测动画意味着onLayoutChildren(Recycler, State)将被调用两次; 一次是作为“预先”布局步骤,以确定项目在真实布局之前的位置,并再次执行“真实”布局。 在预先布置阶段,项目会记住他们的布局前位置,以便适当地布置它们。 另外,将从废料中返回removed件物品,以帮助确定其他物品的正确放置位置。 这些删除的项目不应该添加到子列表中,而应该用于帮助计算其他视图的正确定位,包括以前不在屏幕上的视图(称为APPEARING视图),但可以确定其前置布局离屏位置给出有关预布局移除视图的额外信息。

第二个布局过程是真正的布局,其中只使用未删除的视图。 如果supportsPredictiveItemAnimations()返回true,则在此过程中唯一的附加要求是注意哪些视图在布局之前存在于子列表中,哪些视图在布局之后不存在(称为DISAPPEARING视图),并适当地定位/布置这些视图,而不考虑RecyclerView的实际范围。 这允许动画系统知道动画这些消失的视图的位置。

RecyclerView的默认LayoutManager实现已经处理了所有动画需求。 RecyclerView的客户可以直接使用这些布局管理器中的一个,或者查看onLayoutChildren()的实现来了解它们如何解释APPEARING和DISAPPEARING视图。

Parameters
recycler RecyclerView.Recycler: Recycler to use for fetching potentially cached views for a position
state RecyclerView.State: Transient state of RecyclerView

onLayoutCompleted

void onLayoutCompleted (RecyclerView.State state)

完整布局计算完成后调用。 由于动画或布局测量,布局计算可能包含多个onLayoutChildren(Recycler, State)呼叫,但它只包含一个onLayoutCompleted(State)呼叫。 此方法将在layout(int, int, int, int)调用结束时调用。

这是LayoutManager做一些清理的好地方,例如待处理的滚动位置,保存的状态等。

Parameters
state RecyclerView.State: Transient state of RecyclerView

scrollHorizontallyBy

int scrollHorizontallyBy (int dx, 
                RecyclerView.Recycler recycler, 
                RecyclerView.State state)

以屏幕坐标中的dx像素水平滚动并返回行进的距离。 默认实现不做任何事情并返回0。

Parameters
dx int: distance to scroll by in pixels. X increases as scroll position approaches the right.
recycler RecyclerView.Recycler: Recycler to use for fetching potentially cached views for a position
state RecyclerView.State: Transient state of RecyclerView
Returns
int The actual distance scrolled. The return value will be negative if dx was negative and scrolling proceeeded in that direction. Math.abs(result) may be less than dx if a boundary was reached.

scrollVerticallyBy

int scrollVerticallyBy (int dy, 
                RecyclerView.Recycler recycler, 
                RecyclerView.State state)

在屏幕坐标中垂直滚动dy像素并返回行进的距离。 默认实现不做任何事情并返回0。

Parameters
dy int: distance to scroll in pixels. Y increases as scroll position approaches the bottom.
recycler RecyclerView.Recycler: Recycler to use for fetching potentially cached views for a position
state RecyclerView.State: Transient state of RecyclerView
Returns
int The actual distance scrolled. The return value will be negative if dy was negative and scrolling proceeeded in that direction. Math.abs(result) may be less than dy if a boundary was reached.

setMeasuredDimension

void setMeasuredDimension (Rect childrenBounds, 
                int wSpec, 
                int hSpec)

设置儿童给定边界框的测量尺寸和传递到onMeasure(int, int)的测量规格。 它是在RecyclerView在测量过程中调用onLayoutChildren(Recycler, State)之后调用的。

该方法应该调用 setMeasuredDimension(int, int)

默认实现将RecyclerView的填充添加到给定的边界框,然后将该值限制在给定的测量规格内。

仅当LayoutManager选择进入自动测量API时才调用此方法。

Parameters
childrenBounds Rect: The bounding box of all children
wSpec int: The widthMeasureSpec that was passed into the RecyclerView.
hSpec int: The heightMeasureSpec that was passed into the RecyclerView.

setSpanCount

void setSpanCount (int spanCount)

设置要布置的跨度数。

如果getOrientation()VERTICAL ,则这是列数。 如果getOrientation()HORIZONTAL ,则这是行数。

Parameters
spanCount int: The total number of spans in the grid

也可以看看:

setSpanSizeLookup

void setSpanSizeLookup (GridLayoutManager.SpanSizeLookup spanSizeLookup)

设置源以获取适配器中每个项目占用的跨度数。

Parameters
spanSizeLookup GridLayoutManager.SpanSizeLookup: GridLayoutManager.SpanSizeLookup instance to be used to query number of spans occupied by each item

setStackFromEnd

void setStackFromEnd (boolean stackFromEnd)

GridLayoutManager不支持stackFromEnd。 考虑使用setReverseLayout(boolean)

Parameters
stackFromEnd boolean

supportsPredictiveItemAnimations

boolean supportsPredictiveItemAnimations ()

返回此LayoutManager是否支持自动项目动画。 希望支持项目动画的LayoutManager应遵守onLayoutChildren(Recycler, State)列出的某些规则。 默认返回值是false ,因此LayoutManager的子类默认不会获得预测项目动画。

在RecyclerView中是否启用项目动画由此方法的返回值和RecyclerView自身上设置的ItemAnimator决定。 如果RecyclerView有一个非零的ItemAnimator,但此方法返回false,则将启用简单的项目动画,其中移动或移出屏幕的视图只是淡入/淡出。 如果RecyclerView有一个非null的ItemAnimator,并且此方法返回true,那么将会有两次调用onLayoutChildren(Recycler, State)来设置所需的信息,以更智能地预测出现和消失的视图应该从哪里开始动画。

Returns
boolean true if predictive item animations should be enabled, false otherwise

Hooray!