介绍

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

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

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

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

高度需要注意的点

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

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

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

我们来看一个例子。

例子讲解

需求如下:

  1. 使用ScrollView加载200个数据,呈垂直出现滚动条;
  2. 在ScrollView的顶部放一个TO DOWN按钮;
  3. 在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"><ScrollViewandroid:id="@+id/scrollView"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:descendantFocusability="blocksDescendants"android:orientation="vertical" ><Buttonandroid:id="@+id/buttonToDown"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="To Down" /><TextViewandroid:id="@+id/textShow"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="" /><Buttonandroid: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;@Overrideprotected 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{@Overridepublic void onClick(View v){switch (v.getId()) {case R.id.buttonToDown://scrollView.fullScroll(ScrollView.FOCUS_DOWN);scrollView.post(new Runnable() {@Overridepublic void run() {scrollView.fullScroll(ScrollView.FOCUS_DOWN);}});break;case R.id.buttonToTop://scrollView.fullScroll(ScrollView.FOCUS_UP);scrollView.post(new Runnable() {@Overridepublic void run() {scrollView.fullScroll(ScrollView.FOCUS_UP);}});break;}}}
}

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

Android入门第20天-Android里的ScrollView的使用相关推荐

  1. Android入门第18天-Android里的SeekBar的使用

    SeekBar的介绍 SeekingBar是这么样的一个东西,它常常用在播放视频.音步时用来调节音量.模糊阀值等场景. SeekBar里怎么是通过:android:layout_weight=&quo ...

  2. Android入门第19天-Android里的RatingBar的使用

    介绍 我们先来看一下什么叫RatingBar长什么样的. 我们很多时候订单评价给5星.打车评价都是用的这个RatingBar.本节我们学的这个RatingBar(星级评分条)其实在使用上是非常简单的, ...

  3. Android入门第31天-Android里的ViewFlipper翻转视图的使用

    介绍 本篇给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层 ...

  4. Android入门第1天-Android Studio的安装

    安装前的准备 在hosts文件中加入dl.google.com的ip映射 Android Studio在安装时大量的依赖库会从dl.google.com下载.在国内安装步骤卡死基本都是卡死在该步.那么 ...

  5. Android入门第9天-Android读本地JSON文件并显示

    Android在大都情况会取得后台Service返回的json数据来做前端展示.那么Android是如何处理json文件的呢?我们就一起跟着今天的教程一步步来实现吧. 目标 设本地有一个demo.js ...

  6. Android入门第41天-Android中的Service(bindService)

    介绍 在前一天我们介绍了Android中有两种启动Service的方法.并擅述了startService和bindService的区别.同时我们着重讲了startService. 因此今天我们就来讲b ...

  7. Android入门第30天-Android里的Toast的使用

    介绍 本篇带来的是: Android用于提示信息的一个控件--Toast(吐司)!Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失! ...

  8. Android入门第35天-Android里的SubMenu

    简介 我们延用在上一篇Menu篇里的例子,把这个ContextMenu里套一层子菜单. 其实,它的原理很简单. 就是在ContextMenu的:public void onCreateContextM ...

  9. Android入门第2天-Android Studio中新建项目

    本章要完成的目标 创建新工程: 设置Gradle镜像: 先讲一下Android Studio工具的使用常识 Android Studio是一款基于IDE的Android开发工具,为目前市面最标准And ...

最新文章

  1. ISME:二氧化碳和氮水平对植物根表菌群和功能的影响
  2. 清华北大等12校首批开设“未来技术学院”,它们都设置了哪些专业?
  3. 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
  4. linux实验五 信号应用,实验五 进程间通信(中)
  5. 关于codeblocks插件(持续更新)
  6. 电脑编程教学_东莞沙田mastercam编程学习怎么收费
  7. JSK-11 移除数组中的重复元素【入门】
  8. Vue-动态组件和插槽
  9. anaconda装完没反应
  10. 重庆市计算机一级考试2015,2015年计算机一级考试试题及答案
  11. 1.安装编译软件(keil)
  12. 使用uiautomation 实现微信自动发送消息
  13. uart协议学习,从了解到入门,看这篇文章
  14. 一个画布有多个子图_如何把多张图拼成一张长图
  15. 身体不同部位锻炼相关英语表达
  16. 基础命令和脚本练习初识
  17. 桌面计算机图标带虚线框,win10系统桌面图标有虚线框的操作方法
  18. 汉得 HAP (HAND Application Platform)
  19. uniapp 图片涂鸦、画笔 Ba-ImagePaint
  20. 什么软件测试iphone性能,5款iPhone性能测试比拼:A9虽然垫底,与A13的差距并不大...

热门文章

  1. st2全版本漏洞检测java,Struts2全版本漏洞利用复现(长期更新)
  2. 【东方博宜】1112 - 【入门】查找子串并替换
  3. CUDA error: out of memory
  4. 6-7 实现两个整数的交换 (10分)
  5. 多麦克风做拾音的波束_搜狗推出 8 麦阵列的 AI 录音笔,拾音和转写能力大幅提升...
  6. SVM支持向量机一(入门)
  7. ubuntu11.10桌面怎么变成经典桌面
  8. 一牛网:Android camera驱动培训班,不可错过的学习机会
  9. 怎样自制干果核桃仁蛋糕
  10. Cause: java.sql.SQLNonTransientConnectionException