热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MaterialDesign系列第八篇——CreatingListsandCards

CreatingListsandCards创建列表和卡片Tocreatecomplexlistsandcardswithmaterialdesignstylesinyourapps
Creating Lists and Cards //创建列表和卡片

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

//创建材料设计风刮的灵活的列表和卡片,你可以使用RecyclerView 和CardView控件。

Create Lists //创建列表


The RecyclerView widget is a more advanced and flexible version of ListView. This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views. Use the RecyclerView widget when you have data collections whose elements change at runtime based on user action or network events.

//这个RecyclerView控件比ListView控件更高级更灵活。这个控件是一个展示大数据能维持有限数量的视图高效滚动的容器。使用RecyclerView控件在当你有元素在用户操作或网络事件发生改变时的数据集合。

The RecyclerView class simplifies the display and handling of large data sets by providing:

//RecyclerView很简单展示和处理大数据:

  • Layout managers for positioning items //Item使用布局管理器管理
  • Default animations for common item operations, such as removal or addition of items //默认常见的item操作动画,比如增加或删除item。

You also have the flexibility to define custom layout managers and animations for RecyclerView widgets.

//你也可以灵活的自定义布局管理和动画。


Figure 1. The RecyclerView widget.

To use the RecyclerView widget, you have to specify an adapter and a layout manager. To create an adapter, extend the RecyclerView.Adapter class. The details of the implementation depend on the specifics of your dataset and the type of views. For more information, see the examples below.

//使用RecyclerView控件,你必须定义一个适配器和布局管理器。创建一个继承 RecyclerView.Adapter 的适配器。详细的实现需要根据你特定的数据和视图类型。


Figure 2 - Lists with RecyclerView.

A layout manager positions item views inside a RecyclerView and determines when to reuse item views that are no longer visible to the user. To reuse (or recycle) a view, a layout manager may ask the adapter to replace the contents of the view with a different element from the dataset. Recycling views in this manner improves performance by avoiding the creation of unnecessary views or performing expensive findViewById() lookups.

//布局管理器定位Item在RecyclerView里 和决定当用户不可见ItemView何时重用。对于重用(回收)一个视图,布局管理器将通知适配器把ItemView的内容替换掉数据源中不同的元素。习惯性得去回收视图可以提高性能,避免创建不必要的视图和使用高代价的 findViewById() 方法。

RecyclerView provides these built-in layout managers:

//RecyclerView提供默认的布局管理器:

  • LinearLayoutManager shows items in a vertical or horizontal scrolling list. //线性布局管理器 展示垂直或水平的滑动列表
  • GridLayoutManager shows items in a grid. //网格布局管理器
  • StaggeredGridLayoutManager shows items in a staggered grid. //瀑布流布局管理器

To create a custom layout manager, extend the RecyclerView.LayoutManager class.//创建自定义的布局管理器,继承RecyclerView.LayoutManager

Animations

Animations for adding and removing items are enabled by default in RecyclerView. To customize these animations, extend the RecyclerView.ItemAnimator class and use the RecyclerView.setItemAnimator() method.

//增加和删除item动画在RecyclerView默认开启了。需要自定义Item动画,继承RecyclerView.ItemAnimator类和RecyclerView.setItemAnimator() 方法。

Examples

The following code example demonstrates how to add the RecyclerView to a layout:



   
android:id="@+id/my_recycler_view"
   
android:scrollbars="vertical"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"/>

Once you have added a RecyclerView widget to your layout, obtain a handle to the object, connect it to a layout manager, and attach an adapter for the data to be displayed:

//一旦你在布局中添加了RecyclerView控件,取出他的对象,连接到这个控件设置布局管理器,为数据展示设置一个适配器:

public class MyActivity extends Activity{
   
private RecyclerView mRecyclerView;
   
privateR ecyclerView.Adapter mAdapter;
   
private RecyclerView.LayoutManager mLayoutManager;

   
@Override
   
protectedvoid 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
=newLinearLayoutManager(this);
        mRecyclerView
.setLayoutManager(mLayoutManager);

       
// specify an adapter (see also next example)
        mAdapter
=newMyAdapter(myDataset);
        mRecyclerView
.setAdapter(mAdapter);
   
}
   
...
}

The adapter provides access to the items in your data set, creates views for items, and replaces the content of some of the views with new data items when the original item is no longer visible. The following code example shows a simple implementation for a data set that consists of an array of strings displayed using TextView widgets:

//这个适配器提供在你的数据集中访问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
  //提供一个引用为了一个视图为每个Item有复杂数据的
   
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
&#61; v;
       
}
   
}

   
// Provide a suitable constructor (depends on the kind of dataset)
   
public MyAdapter(String[] myDataset){
        mDataset
&#61; myDataset;
   
}

   
// Create new views (invoked by the layout manager)
   
&#64;Override
   
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   
int viewType){
       
// create a new view
       
View v &#61;LayoutInflater.from(parent.getContext())
                               
.inflate(R.layout.my_text_view, parent,false);
       
// set the view&#39;s size, margins, paddings and layout parameters
       
...
       
ViewHolder vh &#61;newViewHolder(v);
       
return vh;
   
}

   
// Replace the contents of a view (invoked by the layout manager)
   
&#64;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)
   
&#64;Override
   
public int getItemCount(){
       
return mDataset.length;
   
}
}


Figure 3. Card examples.

Create Cards


CardView extends the FrameLayout class and lets you show information inside cards that have a consistent look across the platform. CardView widgets can have shadows and rounded corners.

To create a card with a shadow, use the card_view:cardElevation attribute. CardView uses real elevation and dynamic shadows on Android 5.0 (API level 21) and above and falls back to a programmatic shadow implementation on earlier versions. For more information, see Maintaining Compatibility.

Use these properties to customize the appearance of the CardView widget:

  • To set the corner radius in your layouts, use the card_view:cardCornerRadius attribute.
  • To set the corner radius in your code, use the CardView.setRadius method.
  • To set the background color of a card, use the card_view:cardBackgroundColor attribute.

The following code example shows you how to include a CardView widget in your layout:

xmlns:android&#61;"http://schemas.android.com/apk/res/android"
   
xmlns:tools&#61;"http://schemas.android.com/tools"
   
xmlns:card_view&#61;"http://schemas.android.com/apk/res-auto"
    ...
>
   

   

       
xmlns:card_view&#61;"http://schemas.android.com/apk/res-auto"
       
android:id&#61;"&#64;&#43;id/card_view"
       
android:layout_gravity&#61;"center"
       
android:layout_width&#61;"200dp"
       
android:layout_height&#61;"200dp"
       
card_view:cardCornerRadius&#61;"4dp">

       

           
android:id&#61;"&#64;&#43;id/info_text"
           
android:layout_width&#61;"match_parent"
           
android:layout_height&#61;"match_parent"/>
   

For more information, see the API reference for CardView.

Add Dependencies


The RecyclerView and CardView widgets are part of the v7 Support Libraries. To use these widgets in your project, add these Gradle dependencies to your app&#39;s module:

dependencies {
   
...
    compile
&#39;com.android.support:cardview-v7:21.0.&#43;&#39;
    compile
&#39;com.android.support:recyclerview-v7:21.0.&#43;&#39;
}


转:https://www.cnblogs.com/bvin/p/4208699.html



推荐阅读
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 《Intel IA-32 架构软件开发人员手册详尽指南》提供了详尽的 IA-32 架构技术文档,涵盖指令集、系统编程和硬件接口等内容,为软件开发人员提供全面的技术支持和参考。该手册不仅包括详细的架构说明,还提供了丰富的编程示例和最佳实践,帮助开发人员更好地理解和应用 IA-32 架构。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有