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
实例来更改它。
Nested classes |
|
---|---|
class |
GridLayoutManager.DefaultSpanSizeLookup |
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的子项创建默认的 |
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使用的当前 |
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) 在 |
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) 设置儿童给定边界框的测量尺寸和传递到 |
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
|
相关方法:
int DEFAULT_SPAN_COUNT
常量值:-1(0xffffffff)
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 (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 (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. |
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 |
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 |
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 |
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 |
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. |
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. |
int getSpanCount ()
返回此网格布置的跨度数。
Returns | |
---|---|
int |
The number of spans |
也可以看看:
GridLayoutManager.SpanSizeLookup getSpanSizeLookup ()
返回GridLayoutManager使用的当前 GridLayoutManager.SpanSizeLookup
。
Returns | |
---|---|
GridLayoutManager.SpanSizeLookup |
The current GridLayoutManager.SpanSizeLookup used by the GridLayoutManager. |
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 |
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 |
void onItemsAdded (RecyclerView recyclerView, int positionStart, int itemCount)
当项目已添加到适配器时调用。 如果插入的项目需要刷新当前可见的一组子视图,则LayoutManager可以选择requestLayout。 (例如,当前空白空间将由附加项目填充等)
void onItemsChanged (RecyclerView recyclerView)
在 notifyDataSetChanged()
被触发时调用,而不是提供有关实际更改内容的详细信息。
void onItemsMoved (RecyclerView recyclerView, int from, int to, int itemCount)
在使用适配器移动项目时调用。
请注意,一个项目也可能会改变位置以响应另一个ADD / REMOVE / MOVE操作。 此回调仅在调用notifyItemMoved(int, int)
调用。
void onItemsRemoved (RecyclerView recyclerView, int positionStart, int itemCount)
当从适配器中移除项目时调用。
void onItemsUpdated (RecyclerView recyclerView, int positionStart, int itemCount, Object payload)
当适配器和可选有效载荷中的项目已更改时调用。 默认实现调用onItemsUpdated(RecyclerView, int, int)
。
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 |
void onLayoutCompleted (RecyclerView.State state)
完整布局计算完成后调用。 由于动画或布局测量,布局计算可能包含多个onLayoutChildren(Recycler, State)
呼叫,但它只包含一个onLayoutCompleted(State)
呼叫。 此方法将在layout(int, int, int, int)
调用结束时调用。
这是LayoutManager做一些清理的好地方,例如待处理的滚动位置,保存的状态等。
Parameters | |
---|---|
state |
RecyclerView.State : Transient state of RecyclerView |
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. |
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. |
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. |
void setSpanCount (int spanCount)
设置要布置的跨度数。
如果getOrientation()
是VERTICAL
,则这是列数。 如果getOrientation()
是HORIZONTAL
,则这是行数。
Parameters | |
---|---|
spanCount |
int : The total number of spans in the grid |
也可以看看:
void setSpanSizeLookup (GridLayoutManager.SpanSizeLookup spanSizeLookup)
设置源以获取适配器中每个项目占用的跨度数。
Parameters | |
---|---|
spanSizeLookup |
GridLayoutManager.SpanSizeLookup : GridLayoutManager.SpanSizeLookup instance to be used to query number of spans occupied by each item |
void setStackFromEnd (boolean stackFromEnd)
GridLayoutManager不支持stackFromEnd。 考虑使用setReverseLayout(boolean)
。
Parameters | |
---|---|
stackFromEnd |
boolean
|
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 |