Android ScrollView 滚动视图
Android ScrollView 主要用于当一屏内容显示不下时,滑动显示更多,一般情况下我们不会使用它,而是用它的各种子类
ScrollView
ScrollView 只能有一个 一个子元素 ,可以是单一的组件,又或者一个布局包裹着的复杂的层次结构
ScrollView 是一个竖直滚动条,水平方向上的滚动条为 HorizontalScrollView
一般对于可能显示不完的情况,可以直接在布局的外层套上一个: ScrollView 或者 HorizontalScrollView
-
创建一个 空的 Android 项目
cn.twle.android.ScrollView
-
然后下载文件 /static/i/android/string_chuliuxiang.xml 到
res/drawable
目录并覆盖strings.xml
-
修改
activity_main.xml
文件添加一个ScrollView
,然后在ScrollView
里添加一个TextView
<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp" android:orientation="vertical" > <ScrollView android:id="@+id/scrollview" android:layout_width="match_parent" android:layout_height="500dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/chuliuxiang" /> </ScrollView> </LinearLayout>
运行结果如下
滚动到底部或顶部
如果要滚动到 ScrollView 的底部,可以直接使用 fullScroll()方法
滚动到底部
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
滚动到顶部
scrollView.fullScroll(ScrollView.FOCUS_UP);
-
复用上面的 demo
-
修改
activity_main.xml
添加两个按钮<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp" android:orientation="vertical" > <Button android:id="@+id/btn_down" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="滚动到底部" /> <ScrollView android:id="@+id/scrollview" android:layout_width="match_parent" android:layout_height="300dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/chuliuxiang" /> </ScrollView> <Button android:id="@+id/btn_up" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="滚动到顶部" /> </LinearLayout>
-
修改 MainActivity.java
package cn.twle.android.scrollview; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ScrollView; import android.widget.Button; import android.view.View; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_down; private Button btn_up; private ScrollView scrollView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); } private void bindViews() { btn_down = (Button) findViewById(R.id.btn_down); btn_up = (Button) findViewById(R.id.btn_up); scrollView = (ScrollView) findViewById(R.id.scrollview); btn_down.setOnClickListener(this); btn_up.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_down: scrollView.fullScroll(ScrollView.FOCUS_DOWN); break; case R.id.btn_up: scrollView.fullScroll(ScrollView.FOCUS_UP); break; } } }
当然,如果在 addView()
之后如果内容没显示完就调用 fullScroll() 方法可能会失效,解决办法就是自己写 handler 来更新
public static void scrollToBottom(final View scroll, final View inner) { Handler mHandler = new Handler(); mHandler.post(new Runnable() { public void run() { if (scroll == null || inner == null) { return; } int offset = inner.getMeasuredHeight() - scroll.getHeight(); if (offset < 0) { offset = 0; } scroll.scrollTo(0, offset); } }); }
设置滚动的滑块图片
可以直接设置属性
垂直滑块
android:scrollbarThumbVertical
水平滑块
android:scrollbarThumbHorizontal
隐藏滑块
如果要隐藏滑块,可以直接设置属性
android:scrollbars="none"
或是使用 Java 代码
scrollview.setVerticalScrollBarEnabled(false);
设置滚动速度
ScrollView 并没有一个直接的方法用于设置滚动速度,不过可以继承它,然后重写以下方法
@Override public void fling(int velocityY) { super.fling(velocityY / 2); //速度变为原来的一半 }