转载请注明出处: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. VC中添加web控件的方法

    在VC中使用WebBrowser控件的两方法 黄森堂(vcmfc)著 ClassWizard方式: 1.创建包装类:View->ClassWizard->Add Class->For ...

  2. 在界面线程不能使用Sleep和WaitForSingleObject之类的函数, 使用 MsgWaitForMultipleObjects

    http://blog.csdn.net/wishfly/article/details/3726985 你在主线程用了WaitForSingleObject,导致了消息循环的阻塞,界面假死. 然后在 ...

  3. address_space 从哪里来

    address_space 从哪里来 这两天想弄清楚linux的内存分配,忽然看到了address_space,就想弄明白. 整个内核就见到 address_space(1)和address_spac ...

  4. js下读取input中的value值

    很多人(包括我),总想像以前操作js一样,读取到input中的值:document.getElementById('').value; 结果事实证明这样读到得是null. eval(document. ...

  5. 如何获取ul 中li选中的值点击button按钮跳转链接

    <ul id="parent"> <li></li> <li></li> <li></li> & ...

  6. linux ifconfig命令使用详解

    Linux下网卡命名规律:eth0,eth1.第一块以太网卡,第二块.lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位.它代表你的机器本身. 1.ifconfig是查看网卡的信息. if ...

  7. JS的类型比较与转换图

    完整比较图:红色:===橙色:==黄色:<= 和 >= 同时成立,== 不成立蓝色:只有 >=绿色:只有 <= https://www.zhihu.com/question/3 ...

  8. easy_install MySQL-python

    python - Why can't easy_install find MySQLdb? - Stack Overflow easy_install MySQL-python

  9. hadoop深入研究:(七)——压缩

    转载请标明出处:hadoop深入研究:(七)——压缩 文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速.在hadoop大数据的背景下,这两点尤为重要,那么我现在就先来了解下 ...

  10. HOG算子

    原地址:http://blog.csdn.net/chlele0105/article/details/11991533 梯度直方图特征(HOG) 是一种对图像局部重叠区域的密集型描述符,它通过计算局 ...