Android入门第20天-Android里的ScrollView的使用
介绍
ScrollView(滚动条),它有两种“滚动条”:
- 竖直滚动条;
- 水平方向上的滚动条:HorizontalScrollView;
我们经常可以看到在手机里正在垂直加载一堆的数据,然后过一会加载得内容过多,到了手机的底部了,垂直方向就会出现一个“滚动条”。
这个滚动条可以一下滑到底部、也可以一下滑到顶部。如下截图所示。
高度需要注意的点
我们经常为了用户体验,要求加载时或者点一下相应的按钮一下把滚动条定位到手机的底部。但是这边会有一个“异步加载”的问题。
因为滚动条在加载,持续的出现垂直方向的滚动条,这已经是一个主事件了。你要一下定位到底部,我们虽然可以调用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"><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的使用相关推荐
- Android入门第18天-Android里的SeekBar的使用
SeekBar的介绍 SeekingBar是这么样的一个东西,它常常用在播放视频.音步时用来调节音量.模糊阀值等场景. SeekBar里怎么是通过:android:layout_weight=&quo ...
- Android入门第19天-Android里的RatingBar的使用
介绍 我们先来看一下什么叫RatingBar长什么样的. 我们很多时候订单评价给5星.打车评价都是用的这个RatingBar.本节我们学的这个RatingBar(星级评分条)其实在使用上是非常简单的, ...
- Android入门第31天-Android里的ViewFlipper翻转视图的使用
介绍 本篇给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层 ...
- Android入门第1天-Android Studio的安装
安装前的准备 在hosts文件中加入dl.google.com的ip映射 Android Studio在安装时大量的依赖库会从dl.google.com下载.在国内安装步骤卡死基本都是卡死在该步.那么 ...
- Android入门第9天-Android读本地JSON文件并显示
Android在大都情况会取得后台Service返回的json数据来做前端展示.那么Android是如何处理json文件的呢?我们就一起跟着今天的教程一步步来实现吧. 目标 设本地有一个demo.js ...
- Android入门第41天-Android中的Service(bindService)
介绍 在前一天我们介绍了Android中有两种启动Service的方法.并擅述了startService和bindService的区别.同时我们着重讲了startService. 因此今天我们就来讲b ...
- Android入门第30天-Android里的Toast的使用
介绍 本篇带来的是: Android用于提示信息的一个控件--Toast(吐司)!Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失! ...
- Android入门第35天-Android里的SubMenu
简介 我们延用在上一篇Menu篇里的例子,把这个ContextMenu里套一层子菜单. 其实,它的原理很简单. 就是在ContextMenu的:public void onCreateContextM ...
- Android入门第2天-Android Studio中新建项目
本章要完成的目标 创建新工程: 设置Gradle镜像: 先讲一下Android Studio工具的使用常识 Android Studio是一款基于IDE的Android开发工具,为目前市面最标准And ...
最新文章
- ISME:二氧化碳和氮水平对植物根表菌群和功能的影响
- 清华北大等12校首批开设“未来技术学院”,它们都设置了哪些专业?
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
- linux实验五 信号应用,实验五 进程间通信(中)
- 关于codeblocks插件(持续更新)
- 电脑编程教学_东莞沙田mastercam编程学习怎么收费
- JSK-11 移除数组中的重复元素【入门】
- Vue-动态组件和插槽
- anaconda装完没反应
- 重庆市计算机一级考试2015,2015年计算机一级考试试题及答案
- 1.安装编译软件(keil)
- 使用uiautomation 实现微信自动发送消息
- uart协议学习,从了解到入门,看这篇文章
- 一个画布有多个子图_如何把多张图拼成一张长图
- 身体不同部位锻炼相关英语表达
- 基础命令和脚本练习初识
- 桌面计算机图标带虚线框,win10系统桌面图标有虚线框的操作方法
- 汉得 HAP (HAND Application Platform)
- uniapp 图片涂鸦、画笔 Ba-ImagePaint
- 什么软件测试iphone性能,5款iPhone性能测试比拼:A9虽然垫底,与A13的差距并不大...
热门文章
- st2全版本漏洞检测java,Struts2全版本漏洞利用复现(长期更新)
- 【东方博宜】1112 - 【入门】查找子串并替换
- CUDA error: out of memory
- 6-7 实现两个整数的交换 (10分)
- 多麦克风做拾音的波束_搜狗推出 8 麦阵列的 AI 录音笔,拾音和转写能力大幅提升...
- SVM支持向量机一(入门)
- ubuntu11.10桌面怎么变成经典桌面
- 一牛网:Android camera驱动培训班,不可错过的学习机会
- 怎样自制干果核桃仁蛋糕
- Cause: java.sql.SQLNonTransientConnectionException