前言

通过两天的”实战“,今天我们稍微放松一下脚步,让大家喘口气歇一会儿,我们今天为大家带来的控件,解决了太多在项目中遇到的适配问题,如果你已经碰到了这种问题,就紧跟我们的脚步吧~

在前面几篇文章中,向大家介绍了一些常用的布局及UI控件。在使用的过程中,可能会遇到这样的场景,当绘制的UI控件超出手机屏幕尺寸的时候,就会导致此UI控件无法显示。为了解决这一问题,Android提供了滚动视图ScrollView,下面就详细介绍下ScrollView的具体使用。

简介

ScrollView称为滚动视图,当在一个屏幕的像素显示不下绘制的UI控件时,可以采用滑动的方式,使控件显示。

先看下ScrollView类的继承关系:

java.lang.Object

↳android.view.View

↳android.view.ViewGroup

↳android.widget.FrameLayout

↳android.widget.ScrollView

可以看出,ScrollView原来是一个FrameLayout的容器,不过在他的基础上添加了滚动,允许显示的比实际多的内容。

使用方式

1.竖直滚动视图ScrollView

在页面的竖直方向线性布局5个Button,代码如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="20dp"

android:gravity="center"

android:text="内容一"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:gravity="center"

android:text="内容二"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:gravity="center"

android:text="内容三"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:gravity="center"

android:text="内容四"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:layout_marginBottom="80dp"

android:gravity="center"

android:text="内容五"

android:textColor="#03A9F4"

android:textSize="24sp" />

通过Android Studio的Preview视图也可以看出,5个Button已超出屏幕显示,在不使用ScrollView的情况下,父布局直接使用LinearLayout,是无法使屏幕滑动显示所有控件的。

使用ScrollView后显示如下:

注意:ScrollView的子元素只能有一个,可以是一个View(如ImageView、TextView等) 也可以是一个ViewGroup(如LinearLayout、RelativeLayout等),其子元素内部则不再限制,否则会报以下异常。

Caused by: java.lang.IllegalStateException: ScrollView can host only one direct child

2.水平滚动视图HorizontalScrollView

在实际使用时,我们也会遇到水平方向,控件超出屏幕的情况。这时就需要使用水平方向的滚动视图HorizontalScrollView。

在上面代码头部新增一个HorizontalScrollView,水平方向线性布局4个ImageView,代码如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="200dp"

android:layout_marginTop="20dp">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center_vertical"

android:orientation="horizontal">

android:layout_width="120dp"

android:layout_height="120dp"

android:layout_margin="20dp"

android:src="@mipmap/ic_launcher" />

android:layout_width="120dp"

android:layout_height="120dp"

android:layout_margin="20dp"

android:src="@mipmap/ic_launcher" />

android:layout_width="120dp"

android:layout_height="120dp"

android:layout_margin="20dp"

android:src="@mipmap/ic_launcher" />

android:layout_width="120dp"

android:layout_height="120dp"

android:layout_margin="20dp"

android:src="@mipmap/ic_launcher" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="20dp"

android:gravity="center"

android:text="内容一"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:gravity="center"

android:text="内容二"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:gravity="center"

android:text="内容三"

android:textColor="#03A9F4"

android:textSize="24sp" />

android:layout_width="match_parent"

android:layout_height="100dp"

android:layout_marginTop="80dp"

android:layout_marginBottom="80dp"

android:gravity="center"

android:text="内容四"

android:textColor="#03A9F4"

android:textSize="24sp" />

展示效果如下:

可以看出,HorizontalScrollView中的图片内容,可以横向滑动,并且整个布局由于外部嵌套了ScrollView,整体页可以竖直方向滑动。

注意:同ScrollView,HorizontalScrollView中的子元素也只能有一个,否则报错。

XML中常用属性介绍

1.android:fadingEdge="none"

设置拉滚动条时,边框渐变的方向。none(边框颜色不变),horizontal(水平方向颜色变淡),vertical(垂直方向颜色变淡)。

2.android:overScrollMode="never"

删除ScrollView拉到尽头(顶部、底部),然后继续拉出现的阴影效果,适用于2.3及以上的 否则不用设置。

3.android:scrollbars="none"

设置滚动条显示,none(隐藏),horizontal(水平),vertical(垂直)。

4.android:descendantFocusability=""

该属性是当一个为view获取焦点时,定义ViewGroup和其子控件两者之间的关系。

属性的值有三种:

beforeDescendants//viewgroup会优先其子类控件而获取到焦点

afterDescendants//viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants//viewgroup会覆盖子类控件而直接获得焦点

5.android:fillViewport=“true"

这是 ScrollView 独有的属性,用来定义 ScrollView 对象是否需要拉伸自身内容来填充

viewport。通俗来说,就是允许ScrollView去填充整个屏幕。比如ScrollView嵌套的子控件高度达不到屏幕高度时,虽然ScrollView高度设置了match_parent,也无法充满整个屏幕,需设置android:fillViewport=“true"使ScrollView填充整个页面,给ScrollView设置背景颜色就能体现。

常用方法:

滑动开关控制

scrollView.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View view, MotionEvent motionEvent) {

// true禁止滑动 false可滑动

return true;

}

});

滑动位置控制

scrollView.post(new Runnable() {

@Override

public void run() {

//滑动到顶部

scrollView.fullScroll(ScrollView.FOCUS_UP);

//滑动到底部

scrollView.fullScroll(ScrollView.FOCUS_DOWN);

}

});

滑动到某个位置

scrollView.post(new Runnable() {

@Override

public void run() {

//偏移值

int offset = 100;

scrollView.smoothScrollTo(0, offset);

}

});

结语

可以看出,ScrollView是在日常开发中经常使用的View控件,其使用方式也比较简单。上面只是介绍了一些基本的使用操作,在接下来的文章中还会结合实际项目技能点进行深入分析,快点儿来关注我们吧!

(ID:下码看花)

android滚动条布局平分,让你的布局滚动起来—ScrollView相关推荐

  1. android滚动条布局横向,Android自定义ViewGroup实现可滚动的横向布局(2)

    这里直接代码: package com.example.libingyuan.horizontallistview.ScrollViewGroup; import android.content.Co ...

  2. android约束布局中 链,Android-ConstraintLayout(约束布局)-Chains链(链条布局,Nice)

    到Chains这个部分了.之前的新项目做得登录,注册,重置密码等暂时还没用到这种.不过后面可能随着新的设计可能会涉及到.所以赶紧过来看看先.新项目基本就打算全部用约束布局实现了.实际用了也会越来越熟悉 ...

  3. Android用户界面设计“.NET研究”:框架布局

    框架布局是将控件组织在Android程序的用户界面中最简单的布局类型之一. 理解布局对于良好的Android程序设计来说是非常重要的.在这个教程里,你将学到所以关于框架布局的知识,它们主要用来在屏幕上 ...

  4. Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)

    文章目录 1. 开发第一个Hello World程序 1.1 开发程序 1.2 认识程序中的文件 1.3 Android程序结构 1.4 安卓程序打包 2. Android UI开发 2.1 布局的创 ...

  5. android ui动画效果怎么做,AndroidUI 布局动画-为列表添加布局动画效果

    新建一个Android project ,使MainActivity 继承自 ListActivity: public class MainActivity extends ListActivity ...

  6. android开发4:Android布局管理器1(线性布局,相对布局RelativeLayout-案例)

    控件类概述 View 可视化控件的基类 属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickabl ...

  7. Android 软键盘弹出时把布局顶上去,控件乱套解决方法

    Android 软键盘弹出时把布局顶上去,控件乱套解决方法 参考文章: (1)Android 软键盘弹出时把布局顶上去,控件乱套解决方法 (2)https://www.cnblogs.com/zhuj ...

  8. 【Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现

    写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...

  9. Android --- 使用纯java代码实现相对布局(通俗易懂)

    java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...

最新文章

  1. 【网络流24题】飞行员配对方案问题
  2. docker 鱼龙混杂之基础操作篇
  3. 用工具进行CAD转换图片的过程
  4. c语言中的文件类型只有文本文件一种,C语言中的文件类型只有哪两种_后端开发...
  5. 【ARM】Tiny4412裸板编程之MMU(段 16M)
  6. 大学计算机思维导图_【21计算机考研】改考408+1!上海电力大学翻倍扩招,仍考数据结构!...
  7. elastic 索引库_使用Elastic Job Agents自动执行Azure SQL数据库索引维护
  8. MATLAB基本运算
  9. 见贤思齐,正式开启源码之旅
  10. IIS6上Ssl开发环境的搭建
  11. C语言 常用标准库函数 初学者常用
  12. EXCEL的字符串处理公式,自带工作表函数汇总
  13. WordPress中文插件 Erphpdown vip会员+推广提成+收费下载/查看内容+前端个人中心 银联/支付宝/微信支付/财付通/贝宝paypal[更新至v9.6.1]
  14. Spring源码解析之AOP篇(一)----代理模式详解
  15. Python转义字符及用法
  16. 手把手教你使用Travis CI自动部署你的Hexo博客到Github上
  17. CRC32、murmur32、SDBM32碰撞实验数据对比
  18. 怎么免费提取PDF页面?
  19. 网上药店领导品牌_药康网
  20. RabbitMQ解决消息幂等性问题

热门文章

  1. 【报告分享】2021年30+精致女性人群需求洞察:“她”经济时代科技引领精致生活.pdf(附下载链接)...
  2. 个性化商品搜索相关研究梳理
  3. 遍历列表python_python中列表的遍历
  4. python随机分组的思路_python – 对对象进行分组以实现所有组的类似平均属性
  5. 面试准备——Java回顾:基础编程(基本语法、面向对象、异常处理)
  6. Leetcode每日一题:15.3sum(三数之和)
  7. 新建一个html页 必须要有的标签 (meta)
  8. MVP小白入门,只需5步
  9. c++ opencv mat_图像拼接Opencv源码重构
  10. left join 大表放前面_带娃时,走在孩子前面与跟在孩子身后区别很大,很多父母都做错了...