Android入门之ScrollView的使用教程

作者:TGITCIC 时间:2022-01-02 11:21:58 

介绍

ScrollView(滚动条),它有两种“滚动条”:

  • 竖直滚动条;

  • 水平方向上的滚动条:HorizontalScrollView;

我们经常可以看到在手机里正在垂直加载一堆的数据,然后过一会加载得内容过多,到了手机的底部了,垂直方向就会出现一个“滚动条”。

这个滚动条可以一下滑到底部、也可以一下滑到顶部。如下截图所示。

Android入门之ScrollView的使用教程

高度需要注意的点

我们经常为了用户体验,要求加载时或者点一下相应的按钮一下把滚动条定位到手机的底部。但是这边会有一个“异步加载”的问题。

因为滚动条在加载,持续的出现垂直方向的滚动条,这已经是一个主事件了。你要一下定位到底部,我们虽然可以调用ScrollView的FOCUS_DOWN事件。但此时会出现点击无效即点了后滚动条依旧还在加载。

因此我们对于定位到滚动条的底部或者反之顶位到顶部,一定需要使用异步加载机制。这个异步加载事件它会等一会,等主事件结束-如:还正在加载数据完成后,才会调用另一个界面渲染主事件。

我们来看一个例子。

例子讲解

需求如下:

  • 使用ScrollView加载200个数据,呈垂直出现滚动条;

  • 在ScrollView的顶部放一个TO DOWN按钮;

  • 在ScrollView的底部放一个TO TOP按钮;

UI设计上这边要小心一下。我们最外层使用的是LinearLayout,然后内嵌一个ScrollView,在ScrollView内部会有TO DOWN按钮+TextView+TO TOP按钮,此时你一定要在ScrollView内部再使用一个LinearLayout把这3个组件归在一起。在此例中我们使用纵向的LinearLayout。

activity_main.xml

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

<ScrollView
       android:id="@+id/scrollView"
       android:layout_width="match_parent"
       android:layout_height="match_parent">

<LinearLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:descendantFocusability="blocksDescendants"
           android:orientation="vertical" >

<Button
               android:id="@+id/buttonToDown"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:text="To Down" />

<TextView
               android:id="@+id/textShow"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:text="" />

<Button
               android:id="@+id/buttonToTop"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:text="To Top" />

</LinearLayout>
   </ScrollView>

</LinearLayout>

接着我们写我们后端的交互事件的代码。

MainActivity.java

package org.mk.android.demo.demoscrollview;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
   private Button btnDown;
   private Button btnUp;
   private ScrollView scrollView;
   private TextView txtShow;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       bindViews();
   }
   private void bindViews() {
       btnDown = (Button) findViewById(R.id.buttonToDown);
       btnUp = (Button) findViewById(R.id.buttonToTop);
       scrollView = (ScrollView) findViewById(R.id.scrollView);
       txtShow = (TextView) findViewById(R.id.textShow);

StringBuilder sb = new StringBuilder();
       for (int i = 1; i <= 200; i++) {
           sb.append("呵呵 * " + i + "\n");
       }
       txtShow.setText(sb.toString());
       btnDown.setOnClickListener(new OnClickListener());
       btnUp.setOnClickListener(new OnClickListener());
   }
   private class OnClickListener implements View.OnClickListener{
       @Override
       public void onClick(View v){
           switch (v.getId()) {
               case R.id.buttonToDown:
                   //scrollView.fullScroll(ScrollView.FOCUS_DOWN);
                   scrollView.post(new Runnable() {
                       @Override
                       public void run() {
                           scrollView.fullScroll(ScrollView.FOCUS_DOWN);
                       }
                   });
                   break;
               case R.id.buttonToTop:
                   //scrollView.fullScroll(ScrollView.FOCUS_UP);
                   scrollView.post(new Runnable() {
                       @Override
                       public void run() {
                           scrollView.fullScroll(ScrollView.FOCUS_UP);
                       }
                   });
                   break;
           }
       }
   }
}

大家自己去动动手,试试看这个体验吧。

来源:https://blog.csdn.net/lifetragedy/article/details/127790550

标签:Android,ScrollView
0
投稿

猜你喜欢

  • Android App自动更新之通知栏下载

    2023-11-07 16:56:45
  • java Long类型转为json后数据损失精度的处理方式

    2022-08-11 12:37:43
  • SpringBoot利用@Retryable注解实现接口重试

    2023-03-08 19:54:42
  • Spring源码解析之BeanPostProcessor知识总结

    2022-04-07 22:13:34
  • Java判断对象是否为空(包括null ,"")的方法

    2022-11-26 13:50:25
  • C#事件中关于sender的用法解读

    2022-09-30 20:28:39
  • 老生常谈Java String字符串(必看篇)

    2023-06-20 19:56:20
  • Android数据持久化之File机制分析

    2021-05-29 19:24:56
  • 使用SpringBoot+OkHttp+fastjson实现Github的OAuth第三方登录

    2023-03-18 01:27:34
  • Android Notification使用方法总结

    2023-07-15 02:55:27
  • Java面向对象基础知识之抽象类和接口

    2023-02-10 03:02:58
  • Android MaterialCardView的使用介绍与示例

    2023-06-23 06:31:56
  • Java实现FTP文件与文件夹的上传和下载

    2023-09-17 09:45:50
  • 详解java封装实现Excel建表读写操作

    2023-12-24 11:17:20
  • Android UI效果之绘图篇(二)

    2022-12-06 00:49:15
  • SpringBoot 将配置文件挂到 jar 包外面的操作方法

    2023-11-17 11:09:32
  • java实现图片分割指定大小

    2021-07-02 16:56:34
  • Opencv图像处理之轮廓外背景颜色改变

    2022-02-17 01:33:34
  • SpringBoot之自定义Filter获取请求参数与响应结果案例详解

    2023-07-16 20:22:21
  • 深入分析C# Task

    2022-10-24 12:39:00
  • asp之家 软件编程 m.aspxhome.com