这是来自 Google 官方的 Material Design 培训教程的翻译,受个人水平所限,难免有翻译不对的地方,欢迎交流指正。
在应用程序中要创建具备 material design 风格的复杂列表和卡片,可以使用 RecyclerView 和 CardView 组件。
创建列表
RecyclerView 组件是一个更加高级,更加灵活的 ListView 版本。这个组件是这样一个容器,可以用来显示大量的数据集,并且通过维护有限数量的视图来非常高效的滚动。当你拥有大量的数据集,且其中的元素基于用户操作或者网络数据而在运行时改变时,使用 RecyclerView。
RecyclerView 通过提供以下两点来简化显示并处理大数据集:
- 布局管理器来定位数据项
- 为公共数据项的操作定义默认动画,如删除或者新增数据项
你可以灵活地为 RecyclerView 组件定义自定义的布局管理器和动画。
使用 RecyclerView 组件时,需要制定一个适配器和布局管理器。继承 RecyclerView.Adapter
类来创建一个适配器。具体的实现则依赖于特定的数据集和视图的类型。更多信息,可以查看下面的实例。
布局管理器在 RecyclerView 中定位项的视图,并决定当项的视图对用户不可见后何时被复用。要复用(或者回收)一个视图,布局管理器会要求适配从数据集中用一个不同的元素来替换视图的内容。用这种方式来复用视图可以避免由于不必要的视图创建和执行昂贵的 findViewById()
操作,从而提升性能。
RecyclerView 内置了下面的布局管理器:
- LinearLayoutManager:在垂直或者水平滚动列表中显示项。
- GridLayoutManager:通过网格显示项。
- StaggeredGridLayout:在错落的网格中显示项。
继承 RecyclerView.LayoutManager 类来创建自定义的布局管理器。
动画
在 RecyclerView 中添加和移除项的动画是默认支持的。要自定义这些动画,继承 RecyclerView.ItemAnimator 类并使用 RecyclerView.setItemAnimator() 方法。
实例
下面的代码实例展示如何添加 RecyclerView 到布局:
1 | <!-- A RecyclerView with some commonly used attributes --> |
一旦添加一个 RecyclerView 组件到布局中,获得一个对象的句柄,并连接到布局管理器,然后关联一个需要显示的数据的适配器:
1 | public class MyActivity extends Activity { |
适配器提供对数据集中数据项的访问,为数据项创建视图,并且当原始数据项不再可见时使用新的数据项来替换这些视图的内容。下面的代码实例展示一个有字符串数组组成且使用 TextView 控件显示的简单数据集:
1 | public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { |
创建卡片
CardView 集成自 FrameLayout 类,能够使显示在卡片中的信息在多个平台上拥有一致的外观。 CardView 控件可以拥有阴影和圆角。
使用 card_view:cardElevation
属性来创建带圆角的卡片。 CardView 在 Android 5.0 ( API 21) 及以上版本使用真正的海拔和动态阴影,在早先的版本中则使用可编程的阴影实现。更多信息,查看保持兼容性。
使用下面的属性来自定义 CardView 组件的外观:
- 在布局中使用
card_view:cardCornerRadius
属性来设置圆角半径。 - 在代码中使用
CardView.setRadius
方法来设置圆角半径。 - 使用
card_view:cardBackgroundColor
属性来设置卡片的背景色。
下面的代码实例展示如何在布局中包含 CardView 控件:
1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
更多信息,查看 CardView 的 API 引用。
添加依赖
RecyclerView 和 CardView 控件是 Supprot V7 兼容包中的一部分。要在项目中使用这些组件,需要添加下面的 Gradle 依赖到应用模块中:
1 | dependencies { |