版本:Android 2.3 r1
结构
继承关系
public class ScrollView extends FrameLayout
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ScrollView
类概述
一种可供用户滚动的层次结构布局容器,允许显示比实际多的内容。ScrollView是一种FrameLayout
,意味需要在其上放置有自己滚动内容的子元素。子元素可以是一个复杂的对象的布局管理器。通常用的子元素是垂直方向的LinearLayout
,显示在最上层的垂直方向可以让用户滚动的箭头。
TextView
类也有自己的滚动功能,所以不需要使用ScrollView,但是只有两个结合使用,才能保证显示较多内容时候的效率。但只有两者结合使用才可以实现在一个较大的容器中一个文本视图效果。
ScrollView只支持垂直方向的滚动。
构造函数
public ScrollView (FOCUS_UP表示视图向上滚动;FOCUS_DOWN
表示视图向下滚动
返回值
若key事件被消耗(consumed)返回true,其他情况返回false。
public int getMaxScrollAmount ()
返回值
当前滚动视图响应箭头事件能够滚动的最大数。
public boolean isFillViewport ()
指示当前ScrollView的内容是否被拉伸以填充视图可视范围(译者注:viewport可视范围,参见View.onTouchEvent(MotionEvent)有相当复杂的交互,并且前提需要正确执行View.onTouchEvent(MotionEvent)
。事件将按照如下顺序接收到:
1. 收到down事件
2. Down事件或者由视图组的一个子视图处理,或者被用户自己的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理)。如果onTouchEvent()返回true时,你不会收到onInterceptTouchEvent()的任何事件并且所有对触摸的处理必须在onTouchEvent()中发生。
3. 如果此方法返回false,接下来的事件(up to and including the final up)将最先被传递当此,然后是目标的onTouchEvent()。
4.
如果返回true,将不会收到以下任何事件:目标view将收到同样的事件但是会伴随ACTION_CANCEL
,并且所有的更进一步的事件将会传递到你自己的onTouchEvent()方法中而不会再在这里出现。
参数
ev 体系向下发送的动作事件
返回值
如果将运动事件从子视图中截获并且通过onTouchEvent()发送到当前ViewGroup ,返回true。当前目标将会收到ACTION_CANCEL事件,并且不再会有其他消息传递到此。
(译者注:FOCUS_UP表示向上翻一页,FOCUS_DOWN
表示向下翻一页。
返回值
此key事件被消耗(cosumed)返回true,其他返回false。
public void requestChildFocus (ViewGroup可确认以下几点:
* 子项目将是组里的直系子项
* 矩形将在子项目的坐标体系中
重载此方法的ViewGroup
应该支持以下几点:
* 若矩形已经是可见的,则没有东西会改变
* 为使矩形区域全部可见,视图将可以被滚动显示
参数
child 发出请求的子视图
rectangle 子项目坐标系内的矩形,即此子项目希望在屏幕上的定位
immediate 设为true,则禁止动画和平滑移动滚动条
返回值
进行了滚动操作的这个组(group),是否处理此操作。
public void requestLayout ()
当有改变引起当前视图重新布局时,调用此函数。它将规划一个视图树的layout路径。
public void scrollTo (int x, int y)
设置当前视图滚动到的位置。此函数会引起对onScrollChanged(int,
int, int, int)
函数的调用并且会让视图更新。
当前版本取消了在子视图中的滚动。
参数
x 滚动到的X位置
y 滚动到的Y位置
public void setFillViewport (boolean fillViewport)
设置当前滚动视图是否将内容高度拉伸以填充视图可视范围(译者注:viewport可视范围,参见OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS
(只允许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER
。只有当视图可以滚动时,此项设置才起作用。
(译者注:这个函数是2.3 r1 中新增的,API Level 9。关于over-scroll这里译为弹性滚动,即,参见帖子:scrollBy(int, int),但是滚动时候是平缓的而不是立即滚动到某处。
参数
dx 在X方向滚动的像素数
dy 在Y方向滚动的像素数
public final void smoothScrollTo (int x, int y)
类似于scrollTo(int, int)
,但是滚动时候是平缓的而不是立即滚动到某处。
参数
x 要滚动到位置的X坐标
y 要滚动到位置的Y坐标
受保护方法
protected int computeScrollDeltaToGetChildRectOnScreen
(computeVerticalScrollRange()和computeVerticalScrollExtent()
的单位一致。
缺省的偏移是在当前视图滚动的偏移。
返回值
滚动条的滑块垂直方向的偏移。
protected int computeVerticalScrollRange ()
滚动视图的可滚动范围是所有子元素的高度。
返回值
由垂直方向滚动条代表的所有垂直范围,缺省的范围是当前视图的画图高度。
protected float getBottomFadingEdgeStrength ()
返回滚动底部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动底部能见度,值的范围在浮点数0.0f到1.0f之间。
protected float getTopFadingEdgeStrength ()
返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动顶部能见度,值的范围在浮点数0.0f到1.0f之间。
protected void measureChild (overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll操作的结果进行响应。(译者注:这个函数是2.3 r1 中新增的,API Level 9)
参数
scrollX 新的X滚动像素值
scrollY 新的Y滚动像素值
clampedX 当scrollX被over-scroll的边界限制时,值为true
clampedY 当scrollY被over-scroll的边界限制时,值为true
protected boolean onRequestFocusInDescendants (int direction, ViewGroup代价高,否则此行为也会设置为缺省
参数
direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT
previouslyFocusedRect 能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示为null。
返回值
是否取得了焦点
protected void onSizeChanged (int w, int h, int oldw, int oldh)
布局期间当视图的大小发生改变时调用。如果只是添加到视图,调用时显示的是旧值0。(译者注:也就是添加到视图时,oldw和oldh返回的是0)。
参数
w 视图当前宽度
h 视图当前高度
oldw 视图改变前的宽度
oldh 视图改变前的高度
补充
文章精选
Android ApiDemos/ScrollView2 添加自动滚动和智能焦点切换
[Android学习指南]使用ScrollView实现滚动效果
Android中ScrollView与ListView共用问题的解决方案