NestedScrollView
public
class
NestedScrollView
extends FrameLayout
implements
NestedScrollingParent3,
NestedScrollingChild3,
ScrollingView
java.lang.Object | ||||
↳ | android.view.View | |||
↳ | android.view.ViewGroup | |||
↳ | android.widget.FrameLayout | |||
↳ | androidx.core.widget.NestedScrollView |
NestedScrollView is just like ScrollView
, but it supports acting
as both a nested scrolling parent and child on both new and old versions of Android.
Nested scrolling is enabled by default.
Summary
Nested classes | |
---|---|
interface |
NestedScrollView.OnScrollChangeListener
Interface definition for a callback to be invoked when the scroll X or Y positions of a view change. |
Inherited constants |
---|
Inherited fields |
---|
Public constructors | |
---|---|
NestedScrollView(Context context)
|
|
NestedScrollView(Context context, AttributeSet attrs)
|
|
NestedScrollView(Context context, AttributeSet attrs, int defStyleAttr)
|
Public methods | |
---|---|
void
|
addView(View child, int index)
|
void
|
addView(View child, ViewGroup.LayoutParams params)
|
void
|
addView(View child, int index, ViewGroup.LayoutParams params)
|
void
|
addView(View child)
|
boolean
|
arrowScroll(int direction)
Handle scrolling in response to an up or down arrow click. |
void
|
computeScroll()
|
boolean
|
dispatchKeyEvent(KeyEvent event)
|
boolean
|
dispatchNestedFling(float velocityX, float velocityY, boolean consumed)
|
boolean
|
dispatchNestedPreFling(float velocityX, float velocityY)
|
boolean
|
dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow)
|
boolean
|
dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow, int type)
Dispatch one step of a nested scroll in progress before this view consumes any portion of it. |
boolean
|
dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow, int type)
Dispatch one step of a nested scroll in progress. |
void
|
dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow, int type, int[] consumed)
Dispatch one step of a nested scroll in progress. |
boolean
|
dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow)
|
void
|
draw(Canvas canvas)
|
boolean
|
executeKeyEvent(KeyEvent event)
You can call this function yourself to have the scroll view perform scrolling from a key event, just as if the event had been dispatched to it by the view hierarchy. |
void
|
fling(int velocityY)
Fling the scroll view |
boolean
|
fullScroll(int direction)
Handles scrolling in response to a "home/end" shortcut press. |
int
|
getMaxScrollAmount()
|
int
|
getNestedScrollAxes()
|
boolean
|
hasNestedScrollingParent()
|
boolean
|
hasNestedScrollingParent(int type)
Returns true if this view has a nested scrolling parent for the given input type. |
boolean
|
isFillViewport()
Indicates whether this ScrollView's content is stretched to fill the viewport. |
boolean
|
isNestedScrollingEnabled()
|
boolean
|
isSmoothScrollingEnabled()
|
void
|
onAttachedToWindow()
|
boolean
|
onGenericMotionEvent(MotionEvent event)
|
boolean
|
onInterceptTouchEvent(MotionEvent ev)
|
boolean
|
onNestedFling(View target, float velocityX, float velocityY, boolean consumed)
|
boolean
|
onNestedPreFling(View target, float velocityX, float velocityY)
|
void
|
onNestedPreScroll(View target, int dx, int dy, int[] consumed)
|
void
|
onNestedPreScroll(View target, int dx, int dy, int[] consumed, int type)
React to a nested scroll in progress before the target view consumes a portion of the scroll. |
void
|
onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type)
React to a nested scroll in progress. |
void
|
onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, int[] consumed)
React to a nested scroll in progress. |
void
|
onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed)
|
void
|
onNestedScrollAccepted(View child, View target, int axes, int type)
React to the successful claiming of a nested scroll operation. |
void
|
onNestedScrollAccepted(View child, View target, int nestedScrollAxes)
|
boolean
|
onStartNestedScroll(View child, View target, int axes, int type)
React to a descendant view initiating a nestable scroll operation, claiming the nested scroll operation if appropriate. |
boolean
|
onStartNestedScroll(View child, View target, int nestedScrollAxes)
|
void
|
onStopNestedScroll(View target)
|
void
|
onStopNestedScroll(View target, int type)
React to a nested scroll operation ending. |
boolean
|
onTouchEvent(MotionEvent ev)
|
boolean
|
pageScroll(int direction)
Handles scrolling in response to a "page up/down" shortcut press. |
void
|
requestChildFocus(View child, View focused)
|
boolean
|
requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate)
|
void
|
requestDisallowInterceptTouchEvent(boolean disallowIntercept)
|
void
|
requestLayout()
|
void
|
scrollTo(int x, int y)
This version also clamps the scrolling to the bounds of our child. |
void
|
setFillViewport(boolean fillViewport)
Set whether this ScrollView should stretch its content height to fill the viewport or not. |
void
|
setNestedScrollingEnabled(boolean enabled)
|
void
|
setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener l)
Register a callback to be invoked when the scroll X or Y positions of this view change. |
void
|
setSmoothScrollingEnabled(boolean smoothScrollingEnabled)
Set whether arrow scrolling will animate its transition. |
boolean
|
shouldDelayChildPressedState()
|
final
void
|
smoothScrollBy(int dx, int dy)
Like |
final
void
|
smoothScrollTo(int x, int y)
Like |
boolean
|
startNestedScroll(int axes, int type)
Begin a nestable scroll operation along the given axes, for the given input type. |
boolean
|
startNestedScroll(int axes)
|
void
|
stopNestedScroll(int type)
Stop a nested scroll in progress for the given input type. |
void
|
stopNestedScroll()
|
Protected methods | |
---|---|
int
|
computeScrollDeltaToGetChildRectOnScreen(Rect rect)
Compute the amount to scroll in the Y direction in order to get a rectangle completely on the screen (or, if taller than the screen, at least the first screen size chunk of it). |
float
|
getBottomFadingEdgeStrength()
|
float
|
getTopFadingEdgeStrength()
|
void
|
measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
|
void
|
measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
|
void
|
onLayout(boolean changed, int l, int t, int r, int b)
|
void
|
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
|
void
|
onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY)
|
boolean
|
onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect)
When looking for focus in children of a scroll view, need to be a little more careful not to give focus to something that is scrolled off screen. |
void
|
onRestoreInstanceState(Parcelable state)
|
Parcelable
|
onSaveInstanceState()
|
void
|
onScrollChanged(int l, int t, int oldl, int oldt)
|
void
|
onSizeChanged(int w, int h, int oldw, int oldh)
|
Inherited methods | |
---|---|
Public constructors
NestedScrollView
public NestedScrollView (Context context, AttributeSet attrs)
Parameters | |
---|---|
context |
Context |
attrs |
AttributeSet |
NestedScrollView
public NestedScrollView (Context context, AttributeSet attrs, int defStyleAttr)
Parameters | |
---|---|
context |
Context |
attrs |
AttributeSet |
defStyleAttr |
int |
Public methods
addView
public void addView (View child, ViewGroup.LayoutParams params)
Parameters | |
---|---|
child |
View |
params |
ViewGroup.LayoutParams |
addView
public void addView (View child, int index, ViewGroup.LayoutParams params)
Parameters | |
---|---|
child |
View |
index |
int |
params |
ViewGroup.LayoutParams |
arrowScroll
public boolean arrowScroll (int direction)
Handle scrolling in response to an up or down arrow click.
Parameters | |
---|---|
direction |
int : The direction corresponding to the arrow key that was
pressed |
Returns | |
---|---|
boolean |
True if we consumed the event, false otherwise |
computeScroll
public void computeScroll ()
dispatchKeyEvent
public boolean dispatchKeyEvent (KeyEvent event)
Parameters | |
---|---|
event |
KeyEvent |
Returns | |
---|---|
boolean |
dispatchNestedFling
public boolean dispatchNestedFling (float velocityX, float velocityY, boolean consumed)
Parameters | |
---|---|
velocityX |
float |
velocityY |
float |
consumed |
boolean |
Returns | |
---|---|
boolean |
dispatchNestedPreFling
public boolean dispatchNestedPreFling (float velocityX, float velocityY)
Parameters | |
---|---|
velocityX |
float |
velocityY |
float |
Returns | |
---|---|
boolean |
dispatchNestedPreScroll
public boolean dispatchNestedPreScroll (int dx, int dy, int[] consumed, int[] offsetInWindow)
Parameters | |
---|---|
dx |
int |
dy |
int |
consumed |
int |
offsetInWindow |
int |
Returns | |
---|---|
boolean |
dispatchNestedPreScroll
public boolean dispatchNestedPreScroll (int dx, int dy, int[] consumed, int[] offsetInWindow, int type)
Dispatch one step of a nested scroll in progress before this view consumes any portion of it.
Nested pre-scroll events are to nested scroll events what touch intercept is to touch.
dispatchNestedPreScroll
offers an opportunity for the parent view in a nested
scrolling operation to consume some or all of the scroll operation before the child view
consumes it.
Parameters | |
---|---|
dx |
int : Horizontal scroll distance in pixels |
dy |
int : Vertical scroll distance in pixels |
consumed |
int : Output. If not null, consumed[0] will contain the consumed component of dx
and consumed[1] the consumed dy. |
offsetInWindow |
int : Optional. If not null, on return this will contain the offset
in local view coordinates of this view from before this operation
to after it completes. View implementations may use this to adjust
expected input coordinate tracking. |
type |
int : the type of input which cause this scroll event |
Returns | |
---|---|
boolean |
true if the parent consumed some or all of the scroll delta |
dispatchNestedScroll
public boolean dispatchNestedScroll (int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow, int type)
Dispatch one step of a nested scroll in progress.
Implementations of views that support nested scrolling should call this to report
info about a scroll in progress to the current nested scrolling parent. If a nested scroll
is not currently in progress or nested scrolling is not
enabled
for this view this method does nothing.
Compatible View implementations should also call
dispatchNestedPreScroll
before
consuming a component of the scroll event themselves.
Parameters | |
---|---|
dxConsumed |
int : Horizontal distance in pixels consumed by this view during this scroll step |
dyConsumed |
int : Vertical distance in pixels consumed by this view during this scroll step |
dxUnconsumed |
int : Horizontal scroll distance in pixels not consumed by this view |
dyUnconsumed |
int : Horizontal scroll distance in pixels not consumed by this view |
offsetInWindow |
int : Optional. If not null, on return this will contain the offset
in local view coordinates of this view from before this operation
to after it completes. View implementations may use this to adjust
expected input coordinate tracking. |
type |
int : the type of input which cause this scroll event |
Returns | |
---|---|
boolean |
true if the event was dispatched, false if it could not be dispatched. |
dispatchNestedScroll
public void dispatchNestedScroll (int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow, int type, int[] consumed)
Dispatch one step of a nested scroll in progress.
Implementations of views that support nested scrolling should call this to report
info about a scroll in progress to the current nested scrolling parent. If a nested scroll
is not currently in progress or nested scrolling is not
enabled
for this view this method does nothing.
Compatible View implementations should also call
dispatchNestedPreScroll
before
consuming a component of the scroll event themselves.
The original nested scrolling child (where the input events were received to start the
scroll) must provide a non-null consumed
parameter with values {0, 0}.
Parameters | |
---|---|
dxConsumed |
int : Horizontal distance in pixels consumed by this view during this scroll step |
dyConsumed |
int : Vertical distance in pixels consumed by this view during this scroll step |
dxUnconsumed |
int : Horizontal scroll distance in pixels not consumed by this view |
dyUnconsumed |
int : Horizontal scroll distance in pixels not consumed by this view |
offsetInWindow |
int : Optional. If not null, on return this will contain the offset
in local view coordinates of this view from before this operation
to after it completes. View implementations may use this to adjust
expected input coordinate tracking. |
type |
int : the type of input which cause this scroll event |
consumed |
int : Output. Upon this method returning, will contain the original values plus any
scroll distances consumed by all of this view's nested scrolling parents up
the view hierarchy. Index 0 for the x dimension, and index 1 for the y
dimension |
dispatchNestedScroll
public boolean dispatchNestedScroll (int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow)
Parameters | |
---|---|
dxConsumed |
int |
dyConsumed |
int |
dxUnconsumed |
int |
dyUnconsumed |
int |
offsetInWindow |
int |
Returns | |
---|---|
boolean |
executeKeyEvent
public boolean executeKeyEvent (KeyEvent event)
You can call this function yourself to have the scroll view perform scrolling from a key event, just as if the event had been dispatched to it by the view hierarchy.
Parameters | |
---|---|
event |
KeyEvent : The key event to execute. |
Returns | |
---|---|
boolean |
Return true if the event was handled, else false. |
fling
public void fling (int velocityY)
Fling the scroll view
Parameters | |
---|---|
velocityY |
int : The initial velocity in the Y direction. Positive
numbers mean that the finger/cursor is moving down the screen,
which means we want to scroll towards the top.
|
fullScroll
public boolean fullScroll (int direction)
Handles scrolling in response to a "home/end" shortcut press. This method will scroll the view to the top or bottom and give the focus to the topmost/bottommost component in the new visible area. If no component is a good candidate for focus, this scrollview reclaims the focus.
Parameters | |
---|---|
direction |
int : the scroll direction: View.FOCUS_UP
to go the top of the view or
View.FOCUS_DOWN to go the bottom |
Returns | |
---|---|
boolean |
true if the key event is consumed by this method, false otherwise |
getMaxScrollAmount
public int getMaxScrollAmount ()
Returns | |
---|---|
int |
The maximum amount this scroll view will scroll in response to an arrow event. |
getNestedScrollAxes
public int getNestedScrollAxes ()
Returns | |
---|---|
int |
hasNestedScrollingParent
public boolean hasNestedScrollingParent ()
Returns | |
---|---|
boolean |
hasNestedScrollingParent
public boolean hasNestedScrollingParent (int type)
Returns true if this view has a nested scrolling parent for the given input type.
The presence of a nested scrolling parent indicates that this view has initiated a nested scroll and it was accepted by an ancestor view further up the view hierarchy.
Parameters | |
---|---|
type |
int : the type of input which cause this scroll event |
Returns | |
---|---|
boolean |
whether this view has a nested scrolling parent |
isFillViewport
public boolean isFillViewport ()
Indicates whether this ScrollView's content is stretched to fill the viewport.
Returns | |
---|---|
boolean |
True if the content fills the viewport, false otherwise. |
isNestedScrollingEnabled
public boolean isNestedScrollingEnabled ()
Returns | |
---|---|
boolean |
isSmoothScrollingEnabled
public boolean isSmoothScrollingEnabled ()
Returns | |
---|---|
boolean |
Whether arrow scrolling will animate its transition. |
onAttachedToWindow
public void onAttachedToWindow ()
onGenericMotionEvent
public boolean onGenericMotionEvent (MotionEvent event)
Parameters | |
---|---|
event |
MotionEvent |
Returns | |
---|---|
boolean |
onInterceptTouchEvent
public boolean onInterceptTouchEvent (MotionEvent ev)
Parameters | |
---|---|
ev |
MotionEvent |
Returns | |
---|---|
boolean |
onNestedFling
public boolean onNestedFling (View target, float velocityX, float velocityY, boolean consumed)
Parameters | |
---|---|
target |
View |
velocityX |
float |
velocityY |
float |
consumed |
boolean |
Returns | |
---|---|
boolean |
onNestedPreFling
public boolean onNestedPreFling (View target, float velocityX, float velocityY)
Parameters | |
---|---|
target |
View |
velocityX |
float |
velocityY |
float |
Returns | |
---|---|
boolean |
onNestedPreScroll
public void onNestedPreScroll (View target, int dx, int dy, int[] consumed)
Parameters | |
---|---|
target |
View |
dx |
int |
dy |
int |
consumed |
int |
onNestedPreScroll
public void onNestedPreScroll (View target, int dx, int dy, int[] consumed, int type)
React to a nested scroll in progress before the target view consumes a portion of the scroll.
When working with nested scrolling often the parent view may want an opportunity to consume the scroll before the nested scrolling child does. An example of this is a drawer that contains a scrollable list. The user will want to be able to scroll the list fully into view before the list itself begins scrolling.
onNestedPreScroll
is called when a nested scrolling child invokes
View.dispatchNestedPreScroll(int, int, int[], int[])
. The implementation should
report how any pixels of the scroll reported by dx, dy were consumed in the
consumed
array. Index 0 corresponds to dx and index 1 corresponds to dy.
This parameter will never be null. Initial values for consumed[0] and consumed[1]
will always be 0.
Parameters | |
---|---|
target |
View : View that initiated the nested scroll |
dx |
int : Horizontal scroll distance in pixels |
dy |
int : Vertical scroll distance in pixels |
consumed |
int : Output. The horizontal and vertical scroll distance consumed by this parent |
type |
int : the type of input which cause this scroll event
|
onNestedScroll
public void onNestedScroll (View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type)
React to a nested scroll in progress.
This method will be called when the ViewParent's current nested scrolling child view
dispatches a nested scroll event. To receive calls to this method the ViewParent must have
previously returned true
for a call to
onStartNestedScroll(View, View, int, int)
.
Both the consumed and unconsumed portions of the scroll distance are reported to the ViewParent. An implementation may choose to use the consumed portion to match or chase scroll position of multiple child elements, for example. The unconsumed portion may be used to allow continuous dragging of multiple scrolling or draggable elements, such as scrolling a list within a vertical drawer where the drawer begins dragging once the edge of inner scrolling content is reached.
Parameters | |
---|---|
target |
View : The descendent view controlling the nested scroll |
dxConsumed |
int : Horizontal scroll distance in pixels already consumed by target |
dyConsumed |
int : Vertical scroll distance in pixels already consumed by target |
dxUnconsumed |
int : Horizontal scroll distance in pixels not consumed by target |
dyUnconsumed |
int : Vertical scroll distance in pixels not consumed by target |
type |
int : the type of input which cause this scroll event
|
onNestedScroll
public void onNestedScroll (View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, int[] consumed)
React to a nested scroll in progress.
This method will be called when the ViewParent's current nested scrolling child view
dispatches a nested scroll event. To receive calls to this method the ViewParent must have
previously returned true
for a call to
NestedScrollingParent2.onStartNestedScroll(View, View, int, int)
.
Both the consumed and unconsumed portions of the scroll distance are reported to the ViewParent. An implementation may choose to use the consumed portion to match or chase scroll position of multiple child elements, for example. The unconsumed portion may be used to allow continuous dragging of multiple scrolling or draggable elements, such as scrolling a list within a vertical drawer where the drawer begins dragging once the edge of inner scrolling content is reached.
This method is called when a nested scrolling child invokes
NestedScrollingChild3.dispatchNestedScroll(int, int, int, int, int[], int, int[])
} or
one of methods it overloads.
An implementation must report how many pixels of the the x and y scroll distances were
consumed by this nested scrolling parent by adding the consumed distances to the
consumed
parameter. If this View also implements NestedScrollingChild3
,
consumed
should also be passed up to it's nested scrolling parent so that the
parent may also add any scroll distance it consumes. Index 0 corresponds to dx and index 1
corresponds to dy.
Parameters | |
---|---|
target |
View : The descendant view controlling the nested scroll |
dxConsumed |
int : Horizontal scroll distance in pixels already consumed by target |
dyConsumed |
int : Vertical scroll distance in pixels already consumed by target |
dxUnconsumed |
int : Horizontal scroll distance in pixels not consumed by targ |