转载请注明出处: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. 开发人员福利!ChromeSnifferPlus 插件正式登陆 Chrome Web Store

    今天(2014-10-30)下午,ChromeSnifferPlus 插件正式登陆 Chrome Web Store. 在线安装地址: https://chrome.google.com/websto ...

  2. String,StringBuffer与StringBuilder差异??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要地, String 类型和 StringBuffer 类型的主要性能差 ...

  3. 事务代码SE16N查看数表时可以使用命令激活编辑功能

    &sap_edit命令可以激活SE16N编辑功能,维护数据表,但是是除了主键不能维护外都可以修改

  4. 关于jquery文件上传插件 uploadify 3.1的使用

    要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...

  5. HDU 1254 推箱子游戏(搞了一下午。。。)

    中文题目:http://acm.hdu.edu.cn/showproblem.php?pid=1254 一开始常规的人用来做主导,想着想着不对劲,其实是箱子为主导,人只是箱子能否推进的一个判断. 可以 ...

  6. How do I create a zip file?(转)

    Creating a zip file is a task that can easily be accomplished by using the classes ZipOutputStream a ...

  7. 名字修饰约定extern "C"与extern "C++"浅析

    所谓名字修饰约定,就是指变量名.函数名等经过编译后重新输出名称的规则. 比如源代码中函数名称为int Func(int a,int b),经过编译后名称可能为?Func@@YAHHH@Z.?Func@ ...

  8. Unity3D 游戏开发构架篇 ——输入控制

    临近毕业之初.进入Unity3D这个行业,是一家小工作室.老板人非常不错,公司氛围也非常单纯.近期公司开发一款小游戏,初次上手,颇多周折,记录下自己的开发心得.主要涉及一些设计理念,互相交流. 先说下 ...

  9. 打造你自己ajax上传图片

    今天,我们需要的图片上传插件,但是,互联网不提供符合他们的需要和易于使用的.所以我写了自己. 方法1,只使用jquery代码,.代码例如以下 <p> <label>上传图片&l ...

  10. 给工程师的 10 条哲理(浅薄者迷信运气,强者相信因果,软件复制成本为零,文凭不重要,AWS使得创业成本为零,每个手机都是口袋里的强大电脑)

    无论是主题分布式数据库,微服务,Soylent,尤伯杯,或者矮人要塞,我们试图从物质分离出来炒作,推迟叙事的客人.与尊重有软件工程日报的社论部分客观性. 一位渠道的成员说,“当软件工程每日的意见公布, ...