学习Android的第十二天-Android ScrollView 滚动视图

时间:2024-02-17 11:54:55

在 Android 中,ScrollView 是一个常用的滚动视图容器,用于在屏幕空间不足以容纳所有内容时,允许用户在垂直方向上滚动内容。ScrollView 可以包含一个子视图,这个子视图可以是单个组件,也可以是一个布局包含的复杂层次结构。

ScrollView 主要用于处理以下情况:

  1. 当内容超出屏幕范围时,允许用户通过滚动操作来查看隐藏部分的内容。
  2. 当需要在垂直方向上滚动显示内容时,例如长列表或大段文字等。

ScrollView

例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:gravity="center">

        <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/extralongtext" />
        </ScrollView>
</LinearLayout>

滚动到底部或顶部

方法 fullScroll(int direction) 可以用于将 ScrollView 滚动到底部或顶部。这个方法接受一个参数 direction,指定滚动的方向。常量 ScrollView.FOCUS_DOWN 表示滚动到底部,而常量 ScrollView.FOCUS_UP 则表示滚动到顶部。

// 滚动到底部
scrollView.fullScroll(ScrollView.FOCUS_DOWN);

// 滚动到顶部
scrollView.fullScroll(ScrollView.FOCUS_UP);

例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:gravity="center">

        <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="500dp">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/extralongtext" />
        </ScrollView>
        <Button
            android:id="@+id/btn_up"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="滚动到顶部" />
</LinearLayout>
package com.example.myapplication;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.ScrollView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取按钮和 ScrollView 对象
        Button btnDown = findViewById(R.id.btn_down);
        Button btnUp = findViewById(R.id.btn_up);
        ScrollView scrollView = findViewById(R.id.scrollview);

        // 滚动到底部按钮点击事件
        btnDown.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
            }
        });

        // 滚动到顶部按钮点击事件
        btnUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scrollView.fullScroll(ScrollView.FOCUS_UP);
            }
        });
    }
}

设置滚动的滑块图片

在 Android 中,可以使用 android:scrollbarThumbVertical 和 android:scrollbarThumbHorizontal 属性来设置 ScrollView 或 HorizontalScrollView 的滚动条的滑块图片。

隐藏滑块

要隐藏 ScrollView 或 HorizontalScrollView 的滚动条滑块,可以使用两种方法:

方法一:通过 XML 属性设置

可以在 XML 布局文件中直接设置 android:scrollbars 属性为 "none" 来隐藏滚动条滑块。

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="none">

    <!-- ScrollView 内容 -->

</ScrollView>

方法二:通过 Java 代码设置

也可以在 Java 代码中调用 setVerticalScrollBarEnabled(false) 或 setHorizontalScrollBarEnabled(false) 方法来隐藏滚动条滑块。

ScrollView scrollView = findViewById(R.id.scrollview);
scrollView.setVerticalScrollBarEnabled(false);

或者对于 HorizontalScrollView:

HorizontalScrollView horizontalScrollView = findViewById(R.id.horizontal_scrollview);
horizontalScrollView.setHorizontalScrollBarEnabled(false);

设置滚动速度

虽然 ScrollView 并没有直接提供设置滚动速度的方法,但是可以通过继承 ScrollView 并重写其 fling(int velocityY) 方法来实现。在重写的方法中,可以调整滚动速度。

@Override
public void fling(int velocityY) {
    super.fling(velocityY / 2);    //速度变为原来的一半
}

官方文档

  1. Android ScrollView