转载请注明出处:http://blog.csdn.net/bbld_/article/details/40430319

翻译自:http://developer.android.com/training/material/lists-cards.html

为了在你的app中用material design风格去创建复杂的列表和卡片(布局界面),你能够使用RecyclerViewCardView控件。

创建列表

RecyclerView控件是比ListView更先进、灵活的版本号。

这个控件是一个的容器,用于显示有大量数据的view而且在有限制数量的view下可以高效地滚动。

当你有数据集合时,它的元素在用户操作发生改变时或者在网络事件下发生改变时。(这时你就该)使用RecyclerView

RecyclerView类通过下面几点简化了显示和处理大量的数据:

l  为(管理)位置item的布局管理器

l  为通用的item操作显示的默认动画。比如删除或者添加item

你还能够灵活地自己定义RecyclerView控件的布局管理器和它的动画效果。

图一:RecyclerView控件

要使用RecyclerView控件,你必须指定一个适配器和一个布局管理器。要创建适配器,需继承RecyclerView.Adapter类。继承实现的细节取决于你的数据情况和item上view的类型。

很多其它的信息,请參阅接下来的样例。

一个布局管理器定位RecyclerView内部的item视图(view),并确定何时重用对用户不在可见的item视图(view)。

为了重用(或者回收)视图(view)。布局管理器可能会要求适配器使用数据集合中的不同的数据去替换视图(view)的内容。通过这样的方式回收视图(view)避免产生不必要的视图(view)或运行代价高的findViewById()方法,提高了(RecyclerView的)性能。

RecyclerView提供这些内置的布局管理器:

LinearLayoutManager(用来)显示垂直或水平滚动的列表项

GridLayoutManager(用来)显示网格中的item(项)

StaggeredGridLayoutManager(用来)显示交错的网格item(项目)

能够通过继承RecyclerView.LayoutManager类来自己定义自己的布局管理器。

动画

RecyclerView中默认是开启了加入和删除items时的动画的。要自己定义这些动画。继承RecyclerView.ItemAnimator类。并使用RecyclerView.setItemAnimator()方法。

样例

    图二:使用RecyclerView的列表

以下的代码演示样例演示怎样将RecyclerView加入到布局中:

<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

一旦你在布局中加入了RecyclerView控件后。(在activity中)绑定控件。将其连接到一个布局管理器中,并给他附上要显示的数据适配器。

public class MyActivity extends Activity {
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); // use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true); // use a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager); // specify an adapter (see also next example)
mAdapter = new MyAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
}
...
}

该适配器提供数据集中对item(项)的訪问,创建item相应的视图(view)。还有在原来的item不在可见时用新的数据替代了一些的视图(view)。以下的代码显示了一个简单的实现,它由一个字符串数组的数据集用item上的TextView控件显示:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset; // Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
} // Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
} // Create new views (invoked by the layout manager)
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
// set the view's size, margins, paddings and layout parameters
...
ViewHolder vh = new ViewHolder(v);
return vh;
} // Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.mTextView.setText(mDataset[position]); } // Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}

创建卡片

CardView继承了FrameLayout类。并让你在里面的卡片中(显示)有跨平台一致性的外观。CardView控件能够有阴影和圆角(效果)。

要创建具有阴影效果的卡片,能够使用card_view:cardElevation属性。

CardView会在Android5.0(API级别21)以上的系统中使用真实高程(elevation)和动态阴影,(而)在较低的系统版本号中会回落到程序式的阴影效果显示。

欲了解很多其它信息。请參阅Maintaining
Compatibility(保持兼容性)

使用这些属性来定制CardView控件的外观:

l  在布局中设置圆角半径,使用card_view:cardCornerRadius属性

l  在代码中设置圆角半径,使用CardView.setRadius方法

l  要设置一个卡片的背景颜色,使用card_view:cardBackgroundColor属性

以下的代码演示样例显示了怎样在你的布局里加入CardView控件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
... >
<!-- A CardView that contains a TextView -->
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="200dp"
android:layout_height="200dp"
card_view:cardCornerRadius="4dp"> <TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v7.widget.CardView>
</LinearLayout>

很多其它的信息民情參阅CardView的API文档

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQkJMRF8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" height="433" width="253">   图三:卡片演示样例

加入依赖

RecyclerViewCardView控件都是v7支持库的一部分。要在项目中使用这些控件。加入以下的Gradle依赖在你的程序模块中:

dependencies {
...
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
}

------------------------------------------------------------------------ 切割线 --------------------------------------------------------------------------

Elcipse中加入RecyclerView和CardView的依赖

首先确保你的sdk里的Extras里的support library项是最新的

然后进入sdk文件夹里的例如以下文件夹里,把appcompat和cardview项目导入到eclipse的工作空间,而recyclerview则不须要了。由于里面就jar文件没有资源文件。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQkJMRF8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" height="252" width="435">

导入appcompat和项目后。须要把recyclerview目录里的jar包拷贝到appcompat项目的libs目录里然后eclipse就会相当于自己主动帮我们对jar包build path了,例如以下:

而cardview是作为一个项目导进来的,由于它须要一些自己的资源文件。例如以下:

我们须要把cardview项目作为Library项目去给appcompat项目依赖。这样在我们自己的项目中就仅仅需加入appcompat依赖就好了不用再加入cardview项目的依赖。

这样我们就算完毕了~能够在我们自己的项目中使用了。

Demo演示演示样例:

Demo源代码下载地址:http://download.csdn.net/detail/bbld_/8078205

Android Material Design-Creating Lists and Cards(创建列表和卡)-(三)的更多相关文章

  1. Creating Apps With Material Design —— Creating Lists and Cards

    转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android.时间仓促,有翻译问题请留言指出,谢谢 创建Lisst和Cards 在你的应用程序创 ...

  2. Creating Lists and Cards 创建列表和卡片

    To create complex lists and cards with material design styles in your apps, you can use the Recycler ...

  3. Material Design系列第八篇——Creating Lists and Cards

    Creating Lists and Cards //创建列表和卡片 To create complex lists and cards with material design styles in ...

  4. Android Material Design 兼容库的使用

    Android Material Design 兼容库的使用 mecury 前言:近来学习了Android Material Design 兼容库,为了把这个弄懂,才有了这篇博客,这里先推荐两篇博客: ...

  5. Android Material Design : Ripple Effect水波波纹荡漾的视觉交互设计

     Android Material Design : Ripple Effect水波波纹荡漾的视觉交互设计 Android Ripple Effect波纹荡漾效果,是Android Materia ...

  6. Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决

    Android Material Design Ripple Effect在Android5.0(SDK=21)以下Android版本崩溃问题解决 附录1的Android Ripple Effect水 ...

  7. Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout

    如果是为了兼容低版本的Android系统,则需要引用Android Material Design的扩展支持库,我在之前的一篇文章张,较为详细的说明了如何导入Android Material Desi ...

  8. MaterialEditText——Android Material Design EditText控件

    MaterialEditText是Android Material Design EditText控件.可以定制浮动标签.主要颜色.默认的错误颜色等. 随着 Material Design 的到来, ...

  9. Android Material Design控件学习(三)——使用TextInputLayout实现酷市场登录效果

    前言 前两次,我们学习了 Android Material Design控件学习(一)--TabLayout的用法 Android Material Design控件学习(二)--Navigation ...

随机推荐

  1. 新建表维护程序SM30

    1.先新建一个客制表 2.创建一个函数组 3.SE11中该表->实用程序->表维护生成器->权限组填写&NC& ->  函数组填写刚才创建的函数组->维护 ...

  2. smartforms长文本处理方式

    因为长文本的话不好换行,在smartforms中对于长文本的处理有两种:一种是自定义文本模板,自己定义好的文本格式,然后再使用的时候再文本类型中选择文本模板,最好是勾上如果没有文本存在怎无错误.这种方 ...

  3. [Android学习笔记]Android向下兼

    Android向下兼容的思路:使用高版本的API,在运行时判断真实运行平台的API版本,根据不同版本做不同的处理 关键类:Build.class里面定义了API版本相关信息 内部类:VERSION定义 ...

  4. json转换成list map集合

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; i ...

  5. 超声波模块SRF05

    //////////////////////////////////////////////////////////////////////////////// // //     PIC16F877 ...

  6. KMP 知识点总结

    KMP算法是BF算法的改进,主要是消除了主串指针的回溯,提高算法效率. 先简单介绍一下BF算法: 基本思路: 从目标串s的第一个字符开始和模式串的第一个字符比较,相等逐个比较后续字符,否则从目标串的第 ...

  7. poj3468 A Simple Problem with Integers(线段树模板 功能:区间增减,区间求和)

    转载请注明出处:http://blog.csdn.net/u012860063 Description You have N integers, A1, A2, ... , AN. You need ...

  8. Java原型模式之基础

    一.是什么? 定义:用原型实例指定创建对象的种类,而且通过拷贝这些原型创建新的对象.(官方定义) 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype. Prototype类须要 ...

  9. fck编辑器的使用

    FCK编辑器的使用 注意:编辑器有浏览器缓存,所以修改配置后,一定要删一下缓存 这个编辑器是采用 html+javascript 开发出来的 通常作为插件来使用: 1,下载插件包 2,解压,加压之后看 ...

  10. ubuntu12 环境下编译freerdp

    有时候需要从linux环境下远程连接到windows的环境,可以采用freerdp.freerdp是一个linux下开源的工具,在Ubuntu下可以直接用 apt-get install freerd ...