Android ScrollView 滚动视图

Android ScrollView 主要用于当一屏内容显示不下时,滑动显示更多,一般情况下我们不会使用它,而是用它的各种子类

ScrollView

ScrollView 只能有一个 一个子元素 ,可以是单一的组件,又或者一个布局包裹着的复杂的层次结构

ScrollView 是一个竖直滚动条,水平方向上的滚动条为 HorizontalScrollView

一般对于可能显示不完的情况,可以直接在布局的外层套上一个: ScrollView 或者 HorizontalScrollView

  1. 创建一个 空的 Android 项目 cn.twle.android.ScrollView

  2. 然后下载文件 /static/i/android/string_chuliuxiang.xmlres/drawable 目录并覆盖 strings.xml

  3. 修改 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);
  1. 复用上面的 demo

  2. 修改 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>
    
  3. 修改 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);    //速度变为原来的一半
}

官方文档

  1. Android ScrollView

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.