Android L 开发者预览支持库提供两个新的Widgets,RecyclerView和CardView。使用这两个Widgets可以显示复杂的Listview和卡片布局,这两个Widgets默认使用Material design。

RecyclerView

RecyclerView是一个更高级柔性版本的Listview,RecyclerView是一个能包含很多视图的容器,它能完美的处理循环和滚动。在item动态变化的Listview使用RecyclerView。

RecyclerView使用很简单,因为它提供了:

1、定位item的布局管理器

2、常见的item操作默认动画

你能够灵活的为RecyclerView自定义布局管理器和动画。

使用RecyclerView,必须使用指定一个adapter、定义一个布局管理器。创建adapter必须继承自RecyclerView.Adapter。实施的细节需要看数据类型和需要的视图。

RecyclerView widget

RecyclerView 提供了 LayoutManager,RecylerView 不负责子 View 的布局,我们可以自定义 LayoutManager 来实现不同的布局效果,目前只提供了LinearLayoutManager。 LinearLayoutManager 可以指定方向,默认是垂直, 可以指定水平, 这样就轻松实现了水平的 ListView。

RecyclerView Demo:

1、布局文件

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

2、Activity文件

  1. public class MyActivity extends Activity {
  2. private RecyclerView mRecyclerView;
  3. private RecyclerView.Adapter mAdapter;
  4. private RecyclerView.LayoutManager mLayoutManager;
  5.  
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.my_activity);
  10. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  11.  
  12. // improve performance if you know that changes in content
  13. // do not change the size of the RecyclerView
  14. mRecyclerView.setHasFixedSize(true);
  15.  
  16. // use a linear layout manager
  17. mLayoutManager = new LinearLayoutManager(this);
  18. mRecyclerView.setLayoutManager(mLayoutManager);
  19.  
  20. // specify an adapter (see also next example)
  21. mAdapter = new MyAdapter(myDataset);
  22. mRecyclerView.setAdapter(mAdapter);
  23. }
  24. ...
  25. }
  26. To create a simple adapter:
  27.  
  28. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
  29. private String[] mDataset;
  30.  
  31. // Provide a reference to the type of views that you are using
  32. // (custom viewholder)
  33. public static class ViewHolder extends RecyclerView.ViewHolder {
  34. public TextView mTextView;
  35. public ViewHolder(TextView v) {
  36. super(v);
  37. mTextView = v;
  38. }
  39. }
  40.  
  41. // Provide a suitable constructor (depends on the kind of dataset)
  42. public MyAdapter(String[] myDataset) {
  43. mDataset = myDataset;
  44. }
  45.  
  46. // Create new views (invoked by the layout manager)
  47. @Override
  48. public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
  49. int viewType) {
  50. // create a new view
  51. View v = LayoutInflater.from(parent.getContext())
  52. .inflate(R.layout.my_text_view, null);
  53. // set the view's size, margins, paddings and layout parameters
  54. ...
  55. ViewHolder vh = new ViewHolder(v);
  56. return vh;
  57. }
  58.  
  59. // Replace the contents of a view (invoked by the layout manager)
  60. @Override
  61. public void onBindViewHolder(ViewHolder holder, int position) {
  62. // - get element from your dataset at this position
  63. // - replace the contents of the view with that element
  64. holder.mTextView.setText(mDataset[position]);
  65.  
  66. }
  67.  
  68. // Return the size of your dataset (invoked by the layout manager)
  69. @Override
  70. public int getItemCount() {
  71. return mDataset.length;
  72. }
  73. }

3、Recycler adapter

  1. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
  2. private String[] mDataset;
  3.  
  4. // Provide a reference to the type of views that you are using
  5. // (custom viewholder)
  6. public static class ViewHolder extends RecyclerView.ViewHolder {
  7. public TextView mTextView;
  8. public ViewHolder(TextView v) {
  9. super(v);
  10. mTextView = v;
  11. }
  12. }
  13.  
  14. // Provide a suitable constructor (depends on the kind of dataset)
  15. public MyAdapter(String[] myDataset) {
  16. mDataset = myDataset;
  17. }
  18.  
  19. // Create new views (invoked by the layout manager)
  20. @Override
  21. public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
  22. int viewType) {
  23. // create a new view
  24. View v = LayoutInflater.from(parent.getContext())
  25. .inflate(R.layout.my_text_view, null);
  26. // set the view's size, margins, paddings and layout parameters
  27. ...
  28. ViewHolder vh = new ViewHolder(v);
  29. return vh;
  30. }
  31.  
  32. // Replace the contents of a view (invoked by the layout manager)
  33. @Override
  34. public void onBindViewHolder(ViewHolder holder, int position) {
  35. // - get element from your dataset at this position
  36. // - replace the contents of the view with that element
  37. holder.mTextView.setText(mDataset[position]);
  38.  
  39. }
  40.  
  41. // Return the size of your dataset (invoked by the layout manager)
  42. @Override
  43. public int getItemCount() {
  44. return mDataset.length;
  45. }
  46. }

RecyclerView 的标准化了 ViewHolder, 编写 Adapter 面向的是 ViewHoder 而不在是View 了, 复用的逻辑被封装了, 写起来更加简单。

CardView

CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。

可以使用android:elevation属性,创建一个阴影的卡片。

怎样指定CardView的属性:

1、使用android:cardCornerRadius属性指定圆角半径

2、使用CardView.setRadius 设置圆角半径。

3、使用 android:cardBackgroundColor属性设置卡片颜色

在创建布局文件中创建CardView:

  1. <!-- A CardView that contains a TextView -->
  2. <android.support.v7.widget.CardView
  3. xmlns:card_view="http://schemas.android.com/apk/res-auto"
  4. android:id="@+id/card_view"
  5. android:layout_gravity="center"
  6. android:layout_width="200dp"
  7. android:layout_height="200dp"
  8. card_view:cardCornerRadius="4dp">
  9.  
  10. <TextView
  11. android:id="@+id/info_text"
  12. android:layout_width="match_parent"
  13. android:layout_height="match_parent" />
  14. </android.support.v7.widget.CardView>
/**
* @author 张兴业
*  我的新浪微博:@张兴业TBOW
*/

参考:

http://developer.android.com/preview/material/ui-widgets.html

Material Design UI Widgets的更多相关文章

  1. Freebie: Material Design UI Kit

    点这里 Following the guidelines laid out by Google, this free UI kit has been designed so that you can ...

  2. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  3. C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  4. C# WPF过渡效果实现(C# WPF Material Design UI: Transitions)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  5. Jquery之家5个顶级Material Design框架

    谷歌Material Design在如今的前端页面设计中非常流行.Material Design的设计风格向我们展示了一个简单而有内涵的现代UI设计方案. Material Design是如此的简洁美 ...

  6. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  7. Material UI – Material Design CSS 框架

    Material Design 是谷歌推出的全新的设计理念,采用大胆的色彩.流畅的动画播放,以及卡片式的简洁设计.Material Design 风格的设计拥有干净的排版和简单的布局,容易理解,内容才 ...

  8. ANDROID L——Material Design详细解释(UI控制)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  9. Android学习之基础知识十五 — 最佳UI体验(Material Design实战)

    一.前言 长久以来,大多数人都认为Android系统的UI并不美观,至少没有iOS系统的美观.以至于很多IT公司在进行应用界面设计的时候,为了保证双平台的统一性,强制要求Android端的界面风格必须 ...

随机推荐

  1. 在SecureCRT标签显示IP标题(转)

  2. 接入多家ERP厂商,美团点评餐饮高速路开启

    前段时间美团点评CEO王兴所提出的中国互联网进入下半场观点引发了互联网从业人士以及网友们的热议.当时王兴提出,当前国内外所有的互联网公司包括美团点评在内都还远没有做好整个产业链的服务,美团点评也只做了 ...

  3. iOS开发——运行时OC篇&使用运行时获取系统的属性:使用自己的手势修改系统自带的手势

    使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛 ...

  4. 如何保证access_token长期有效

    为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相 ...

  5. super和this区别

    * super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法. 4.super和this的异同: 1)super(参数):调用基类中的某一 ...

  6. css之选择器篇

    css能够获取到HTML结构上的元素,这个是怎么实现的了? 在我们看来这是个很神奇的事情,css可以写在页面之外,也可以写在页面内,而都不会影响到它去 获取这个元素,还有无论这个HTML结构多么复杂, ...

  7. PHP引号转义中解决POST,GET,Mysql数据自动转义问题

    在处理mysql和GET.POST的数据时,常常要对数据的引号进行转义操作. PHP中有三个设置可以实现自动对’(单引号),”(双引号),\(反斜线)和 NULL 字符转转. PHP称之为魔术引号,这 ...

  8. android: 后台执行的定时任务

    Android 中的定时任务一般有两种实现方式,一种是使用 Java API 里提供的 Timer 类, 一种是使用 Android 的 Alarm 机制.这两种方式在多数情况下都能实现类似的效果,但 ...

  9. Android的消息机制: Message/MessageQueue/Handler/Looper

    概览   * Message:消息.消息里面可包含简单数据.Object和Bundle,还可以包含一个Runnable(实际上可看做回调). * MessageQueue:消息队列,供Looper线程 ...

  10. 【Android】wifi开发

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点 ...