屏幕宽高不够,滚动视图ScrollView来凑
前面几期学习了ProgressBar系列组件、ViewAnimator系列组件、Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件。
一、ScrollView概述
从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见。但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成。
在默认情况下,ScrollView只是为其他组件添加垂直滚动条,如果应用需要添加水平滚动条,则可借助于另一个滚动视图HorizontalScrollView来实现。ScrollView与HorizontalScrollView的功能基本相似,只是前者添加垂直滚动条,后者添加水平滚动条。
ScrollView由FrameLayout派生而出,它就是一个用于为普通组件添加滚动条的组件。 ScrollView里最多只能包含一个组件,而ScrollView的作用就是为该组件添加垂直滚动条。
ScrollView支持的XML属性如下:
- android:scrollX:以像素为单位设置水平方向滚动的的偏移值。
- android:scrollY:以像素为单位设置垂直方向滚动的的偏移值。
- android:scrollbarAlwaysDrawHorizontalTrack:设置是否始终显示垂直滚动条。
- android:scrollbarAlwaysDrawVerticalTrack:设置是否始终显示垂直滚动条。
- android:scrollbarDefaultDelayBeforeFade:设置N毫秒后开始淡化,以毫秒为单位。
- android:scrollbarFadeDuration:设置滚动条淡出效果(从有到慢慢的变淡直至消失)时间,以毫秒为单位。
- android:scrollbarSize:设置滚动条的宽度。
- android:scrollbarStyle:设置滚动条的风格和位置。属性值有以下几个:
- outsideInset:该ScrollBar显示在视图(view)的边缘,增加了view的padding. 如果可能的话,该ScrollBar仅仅覆盖这个view的背景。
- outsideOverlay:该ScrollBar显示在视图(view)的边缘,不增加view的padding,该ScrollBar将被半透明覆盖。
- insideInset:该ScrollBar显示在padding区域里面,增加了控件的padding区域,该ScrollBar不会和视图的内容重叠。
- insideOverlay:该ScrollBar显示在内容区域里面,不会增加了控件的padding区域,该ScrollBar以半透明的样式覆盖在视图(view)的内容上。
- android:scrollbarThumbHorizontal:设置水平滚动条的drawable。
- android:scrollbarThumbVertical:设置垂直滚动条的drawable。
- android:scrollbarTrackHorizontal:设置水平滚动条背景(轨迹)的色drawable。
- android:scrollbarTrackVertical:设置垂直滚动条背景(轨迹)的drawable。
- android:scrollbars:设置滚动条显示。属性值有:none、horizontal、vertical。
ScrollView的几个常用方法有:
- addView (View child):添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
- addView (View child, int index):添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
- arrowScroll (int direction):响应点击上下箭头时对滚动条滚动的处理。
- fling (int velocityY):滚动视图的滑动(fling)手势。
二、ScrollView示例
接下来通过一个简单的示例程序来学习ScrollView的使用。
继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建scrollview_layout.xml文件,在其中填充如下代码片段:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:fillViewport="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@drawable/image" />
<Button
android:id="@+id/more_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="more" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ScrollView"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/description"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
</ScrollView>
其中description为定义的字符串,由于内容较多,此处不在给出。
运行程序,可以看到下图所示界面效果,界面可以上下滚动。
关于ScrollView先学到这里,更多用法建议自己多加练习。
- 谈谈个人网站的建立(八)—— 缓存的使用
- 【编程基础】System.arraycopy()和 Arrays.copyOf()
- 移动端 模拟手机联系人触摸A~Z导航
- 谈谈个人网站的建立(七)—— 那些建站必备的插件
- 【美团技术团队博客】Linux资源管理之cgroups简介
- 谈谈个人网站的建立(六)—— 数据库同步
- Javascript解析机制 执行机制
- Tomcat9源码——编译环境搭建
- 谈谈个人网站的建立(五)—— 小集群的部署
- 跟Google学写代码--Chromium/base--cpu源码学习及应用
- Spring项目路径
- 跟Google学写代码--Chromium/base--stl_util源码学习及应用
- libphonenumber--windows上编译libphonenumber.lib以及使用(C++、VS2015)
- querySelector与querySelectorAll
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode链表之合并两个排序的链表
- leetcode链表之找出倒数第k个节点
- ZooKeeper能解决什么问题?不能解决什么问题?
- 画解算法 77-组合
- Spring 源码系列之容器概览~
- Spring Security 中如何让上级拥有下级的所有权限?
- Spring Security 权限管理的投票器与表决机制
- 通过cycler实现属性的自动映射
- 为你的图片添加图例
- matplotlib中的黑魔法:constrained和tight layout
- 用不同的坐标系统对图形元素进行定位
- 对《丢鸡蛋问题》的一点补充
- HA(高可用)就像套娃,像胖子,剥掉一层还有一层
- 《丢鸡蛋问题》重制版来袭~
- 如何搭建一个完美的组件库?