ScrollView本质上是一个FrameLayout,所以它只能为单一的控件提供滚动条,最常用子控件的是LinearLayout。
TextView也可以使用ScrollView,但TextView也提供了自带的滚动条的方法。
注意,不能对ListView使用滚动条。
创建一个简单的ScrollView
可以在xml文件中定义一个ScrollView控件,让它包含一个TextView,如下:
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</ScrollView>
为ScrollView设置监听器
通过为ScrollView设置监听器,可以监听其是否滚动到最底部。
ScrollView最常用的监听器是OnTouchListener,它可以对多种手势动作进行响应,包括按下、滑动、离开等。
下面的例子中对ScrollView的滑动动作进行了响应。
scrollView = (ScrollView) findViewById(R.id.scroll_view);
scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
//滚动条位于顶部
if(scrollView.getScrollY() <= 0){
Log.d("MainActivity", "滚动条位于顶部");
}
//滚动条位于底部
if(scrollView.getChildAt(0).getMeasuredHeight() == scrollView.getHeight() + scrollView.getScrollY()){
Log.d("MainActivity", "滚动条位于底部");
Log.d("MainActivity", "getMeasuredHeight()=" + scrollView.getChildAt(0).getMeasuredHeight());
Log.d("MainActivity", "getHeight()=" + scrollView.getHeight());
Log.d("MainActivity", "getScrollY()=" + scrollView.getScrollY());
textView.append(getResources().getString(R.string.content_2));
}
}
return false;
}
});
}
上面的代码展示了如何判断滚动条位于顶部还是底部。其中包含了几个重要的方法:
- getMeasuredHeight():获得控件真实的高度,包括未显示部分的;
- getHeight():获得控件可见部分的高度;
- getScrollY():获得滚动条的垂直位置。
当滚动条位于最顶端的时候,getScrollY()返回0;
当滚动条位于最底部的时候,有
scrollView.getChildAt(0).getMeasuredHeight() == scrollView.getHeight() + scrollView.getScrollY()
即真实高度=可见高度+滚动距离。这里要注意真实高度要使用TextView的真实高度,而不能选择ScrollView的真实高度,ScrollView的真实高度和可见高度是一样的。所以这里要使用getChlildAt()方法获取到ScrollView的子控件,也就是TextView。
ScrollTo()和ScrollBy()
ScrollTo()和ScrollBy()都可是使滚动条滚动到指定的位置。二者都接受两个int型的整数作为参数,分别代表x轴和y轴坐标。不同之处是,ScrollTo()的坐标是父容器的坐标为参考的,也就是“绝对位置”;而ScrollBy()的坐标是以当前的坐标为参考的,相对当前的位置变动,也可以理解成”相对位置“。
例如,用两个按钮实现页面的滚动:
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_up:
scrollView.scrollBy(0, -30);
break;
case R.id.btn_down:
scrollView.scrollBy(0, 30);
break;
}
}
本文详细介绍了ScrollView的基本用法,包括如何在XML文件中定义ScrollView,并通过TextView示例展示如何使用。此外,还介绍了如何通过监听器来判断ScrollView是否滚动到顶部或底部,以及ScrollTo和ScrollBy方法的具体使用方式。
1万+

被折叠的 条评论
为什么被折叠?



