上次说了我用的主题,应用了MaterialDesign风格。同时,卡片布局也是MaterialDesign的重要组成部分。今天就写到这里吧。介绍在程序中创建复杂的MaterialDesign风格的List和Card,可以使用RecyclerView和CardView组件,这两个组件在最新的supportv7包(21版)中提供。因此需要引入依赖包:dependencies{compile'c??om.android.support:appcompat-v7:+'compile'c??om.android.support:cardview-v7:+'compile'c??om.android.support:recyclerview-v7:+'}创建ListRecylerView组件是一个更高效灵活的ListView。该组件是一个用于显示可高效滚动的大型数据集的容器,保持显示一定数量的视图。当您有数据集时使用RecyclerView组件,并且数据集的元素在运行时根据用户操作或网络事件发生变化。RecylerView类通过提供以下功能简化了大型数据集的显示和处理:用于控制元素定位的布局管理器。显示常见元素操作的默认动画,例如删除和添加元素。要使用RecyclerView组件,您需要指定一个Adapter和一个布局管理器。创建一个继承RecyclerView.Adapter类的适配器。具体实现细节会根据数据采集视图的类型而有所不同。有关具体信息,请参见以下示例。布局管理器将Item视图定位在RecyclerView中,并在它不再可见时决定何时回收它。当重用(或回收)视图时,布局管理器可能会要求适配器(Adapter)将子视图中的内容替换为不同的内容。通过这种方式回收和重用视图可以减少视图的创建,避免更多的findViewById(),从而提高性能。RecyclerView提供以下内置布局管理器:LinearLayoutManager在水平或垂直滚动??列表中显示项目。GridLayoutManager将Items显示为网格布局。StaggeredGridLayoutManager以交错的网格布局显示Item。您还可以通过继承RecyclerView.LayoutManager类来创建自定义布局管理器。RecyclerView组件动画:RecyclerView默认有动画,在删除或添加Item时。如果需要自定义动画,继承RecyclerView.ItemAnimator类,使用RecyclerView.setItemAnimator()方法将定义的动画设置到我们的视图中。下面开始看例子:1.首先在xml布局文件中添加一个RecyclerView2.然后在我们的Java代码中使用它,添加Adapter和数据显示。publicclassMyActivityextendsActivity{privateRecyclerViewmRecyclerView;privateRecyclerView.AdapterAdapter;privateRecyclerView.LayoutManagermLayoutManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.my_activity);mRecyclerView=(RecyclerView)findViewById(R.id.my_view);//recycler_viewusethissettingtoimproveperformanceifouknowthatchanges//incontentdonotchangethelayoutsizeoftheRecyclerViewmRecyclerView.setHasFixedSize(true);//使用线性布局管理器rmLayoutManager=newLinearLayoutManager(this);mRecyclerView.setLayoutManager(mLayoutManager);//指定适配器(参见单独的示例)mAdapter=newMyAdapter(myDataset...AdapterView);mRecyclerView(.mRecyclerView)}3.Adapter提供对数据集中Item的访问,创建映射到数据的视图,用新的item替换布局的内容数据。下面的代码显示了使用TextView显示简单字符串数组的简单实现。publicclassMyAdapterextendsRecyclerView.Adapter{privateString[]mDataset;//Provideareferencetotheviewsforeachdataitem//Complexdataitemsmayneedmorethanoneviewperitem,and//youprovideaccesstoalltheviewsforadataiteminaviewholderpublicstaticclassViewHolderextendsRecyclerView.ViewHolder{//eachdataitemisjustastringinthiscasepublicTextViewmTextView;publicViewHolder(TextViewv){super(v);mTextView=v;}}//提供合适的构造函数(dependsonthekindofdataset)publicMyAdapter(String[]myDataset){mDataset=myDataset;}//Createnewviews(invokedbythelayoutmanager)@OverridepublicMyAdapter.ViewHolderonCreateViewHolder(ViewGroupparent,intviewType){//createanewviewViewv=LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view,parent,false);//设置view的size,margins,paddingsandlayoutparameters...ViewHoldervh=newViewHolder(v);returnvh;}//替换内容sofaview(invokedbythelayoutmanager)@OverridepublicvoidonBindViewHolder(ViewHolderholder,intposition){//-getelementfromyourdatasetatthisposition//-replacethecontentofheviewwiththatelementholder.mTextView.setText(mDataset[position]);}//返回thesizeofyourdataset(invokedbythelayoutmanager)@OverridepublicintgetItemCount(){returnmDataset}out它创建的类inheritsCardRayView}.length信息即可展示在卡片内部,不同平台风格统一。CardView组件可以有阴影和圆角。要创建带阴影的卡片,请使用card_view:cardElevation属性。CardView在Android5.0(API21)及更高版本上使用真实高度和动态阴影,早期版本使用传统阴影。使用这些属性自定义CardView的外观:使用card_view:cardCornerRadius属性在布局文件中设置角半径。在java代码中使用CardView.setRadius方法设置圆角的半径。要设置卡片的背景颜色,请使用card_view:cardBackgroundColor属性。这是在xml布局文件中包含CardView的示例:通过上面的RecyclerView可以看到Card示例图。它和我们经常使用的ListView很相似,但是它的父类不是AbsListView,所以不能一起使用。但是ListView在很多地方是可以替代的。通过ViewHolder和View的复用可以看出这是一个比较高效的视图组件,值得推荐。CardView本质上是一个更符合MaterialDesign的组件。使用Card布局,效果更好。很多人之前可能用过一些CardUi,谷歌官方发布了这个,强烈推荐。上面的RecyclerView和CardView是分开写的,但是我们可以一起使用,不要搞混了。参考资料:http://developer.android.com/training/material/lists-cards.html原文地址:http://blog.isming.me/2014/10/21/creating-app-with-material-design-two-list/,转载请注明出处。