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
投稿

猜你喜欢

  • 解决@RequestBody搭配@Data的大坑

    2022-08-29 18:25:35
  • 一篇文章彻底弄懂Java中二叉树

    2023-04-08 12:47:30
  • 一文详解Java中流程控制语句

    2023-11-26 11:39:49
  • Java实现Andriod带看括弧的计算器代码

    2023-04-06 09:36:00
  • 详解Vue响应式的部分实现

    2022-12-21 23:25:53
  • Feign调用中的两种Header传参方式小结

    2022-10-25 02:47:17
  • SpringBoot中多环境配置和@Profile注解示例详解

    2023-11-29 05:39:04
  • 详解Unity安卓共享纹理

    2022-07-10 08:18:21
  • spring启动加载程序的几种方法介绍

    2022-03-11 14:15:32
  • Android 获取drawable目录图片 并存入指定文件的步骤详解

    2021-11-01 07:04:48
  • C#无法打开计算机“.”上的 IISADMIN 服务的解决方法

    2023-02-04 21:46:54
  • Java中ArrayList和SubList的坑面试题

    2023-09-21 06:56:21
  • MyBatis中不建议使用where 1=1原因详解

    2021-08-09 23:25:55
  • Android:利用SharedPreferences实现自动登录

    2023-05-24 07:53:33
  • 命令提示符编译java的方法(必看篇)

    2022-01-28 08:34:38
  • Spring使用三级缓存解决循环依赖的问题

    2023-03-14 09:06:15
  • java微信公众号企业付款开发

    2023-04-07 00:21:08
  • C#实现多文件压缩与解压功能

    2022-03-05 04:45:54
  • 详解Java Spring AOP

    2023-09-06 15:40:02
  • Java面试必备八股文整理

    2023-11-29 12:03:50
  • asp之家 软件编程 m.aspxhome.com