高级控件
ListView
需要导入的包:android.widget.ListView
ListView主要是以列表的形式展示具体内容,并能够根据数据的长度自适应显示,如果列表项过多还可以自动实现滚动。
常用属性
android:entries:数据源,应是array资源android:divider:分割线样式,可以是drawable或color资源android:dividerHeight:分割线高度
系统自带ListView布局
android.R.layout.simple_list_item_1:列表选项为单独一行的文本框android.R.layout.simple_list_item_2:列表选项包含上下两个文本框android.R.layout.simple_list_item_checked:每项都是一个已选中的列表选项android.R.layout.simple_list_item_single_choice:列表选项包含一个单选按钮android.R.layout.simple_list_item_multiple_choice:列表选项包含一个复选框
布局模式
通过 setChoiceMode() 进行设置。如果采用无选择模式,可不使用该方法,因为这是系统默认采用的模式。
- ListView.CHOICE_MODE_NONE:无选择模式(默认)
- ListView.CHOICE_MODE_SINGLE:最多可以有一项被选中
- ListView.CHOICE_MODE_MULTIPLE:可以多项被选中
通过资源进行数据绑定 (在布局文件中绑定数据源)
通过数据绑定,以实现用一个组件绑定多组信息。
-
定义数组资源
在res/values/arrays.xml中创建数组资源:
```xml
- 数据项1
- 数据项2
……
-
在布局中绑定数据源
使用 ArrayAdapter 进行数据绑定
-
创建数据源数组 允许使用常量字符串数组或从资源文件
arrays.xml中获取数据创建信息。Java
-
创建
ArrayAdapter对象Java
-
选择布局模式
-
适配器绑定到控件上
多行文本列表
-
创建数据源集合和数据源列表,分别存储单个列表项和多个列表项总和。
key为 String,Value 为 Object (任意类型)。 map 中的每个元素代表该列表项中的一行,多个 map 中保持格式一致性,即键值对数量相同、键名相同。 -
创建
SimpleAdapter对象 -
绑定适配器
自定义样式列表
-
新建一个布局文件,为 ListView 选项设计显示样式。
-
创建数据源集合和列表,同多行文本列表。
-
创建
SimpleAdapter对象。 -
将适配器绑定到 ListView。
ListView 事件处理
通过设置监听器 AdapterView.OnItemClickListener 来实现对特定选项的监听。
方法:
parent:容纳适配器的控件对象,如 ListView 对象view:选中选项的 View 对象position:选中记录在数据源中的位置编号id:选项记录行编号,通常和position相同
Grid View
需要包:android.weidget.GirdView
以二维可滚动网格展示。
columnWidth:列宽horizontalSpacing:列与列之间的水平间距verticalSpacing:行与行之间的 垂直间距numColumns:列数,可设置为整数或auto_fit(默认2列,若设置了列宽则为屏幕宽度/列宽StretchMode:设置拉伸模式none:不拉伸spacingWidth:拉伸列间的间距columnWidth:拉伸列自身spacingWidthUniform:均匀地扩展列和列之间的空间
绑定资源、设置适配器、自定义样式和事件监听与ListView相同。
Recycler View
RecyclerView是ListView和GridView的增强版,支持横向和纵向滑动列表显示,也支持多列网格和瀑布流式布局。
使用RecyclerView控件需要创建自定义Adapter类和LayoutManager类对象(通常直接实例化内置的LayoutManager类即可,无需自行新建自定义的LayoutManager类)。
使用前需要在build.gradle(app)的dependencies闭包中添加:
XML
自定义适配器类
继承RecyclerView.Adapter<自定义内部类名>,必须定义一个继承于RecyclerView.ViewHolder的内部类和重写三个方法:
- 构造函数,初始化数据源集合。
- 继承
RecyclerView.ViewHolder的自定义内部类:其构造函数接收一个View参数(通常是子项布局的最外层控件),并在此使用findViewById获取并初始化各个子控件对象。 onCreateViewHolder:根据子项样式布局文件创建自定义ViewHolder类实例。通常在此处使用LayoutInflater.from(parent.getContext()).inflate(...)方法引入子项布局。onBindViewHolder:每个子项被滚动到屏幕中时,把数据源中第x号的元素各组键值放进子项各个子控件中。getItemCount:返回子项数量(即数据源集合的长度)。
RecyclerView对象
在Activity中的基本配置步骤包括:获取RecyclerView对象、为其设置LayoutManager布局管理器、为其设置自定义适配器对象。
支持三种内置布局:
LinearLayoutManager:线性布局的滑动列表,支持横向和纵向滑动。GridLayoutManager:网格布局,需要指定列数(spanCount)。StaggeredGridLayoutManager:瀑布流式布局,需要指定列数和滚动方向。
事件处理
RecyclerView没有像ListView那样提供内置的 setOnItemClickListener 监听器,需监听其选项或选项的子控件,按以下两步实现:
- 获取事件源控件:可以在自定义适配器类的内部类的构造函数中,或者在
onBindViewHolder方法中获取事件源控件。 - 为事件源注册监听器对象:在
onBindViewHolder方法中,或者在自定义适配器类的内部类的构造函数中为事件源注册监听器对象,定义和重写匿名监听器类。