官网地址:https://developer.android.com/intl/zh-tw/design/material/index.html

使用Material Design 需要api21,即Lollipop/5.0以上

Material Design 为应用提供了:一个新的主题,一些组合View的新Widget,一些自定义阴影和动画的新Api

Material 主题

在manifest.xml 中<... android:theme="@android:style/Theme.Material" /> 提示一下有很多相关的主题

Lists和Cards

5.0提供了两个新的Widget,它们使用了Material Design 的style和animation:

列表式:RecyclerView 一个更可插拔式的ListView,它支持不同的布局类型,并且性能有了改进。

卡片式:CardView 一个能让你在其内显示重要信息,并保持连贯的视觉和感觉的卡片。

它两位于 sdk/extras/android/support/v7/cardview 和 sdk/extras/android/support/v7/RecyclerView

View的阴影

View现在除了x、y属性外还有z,z代表一个view的仰角(elevation, 姑且这么翻译吧)

z越大,阴影越大;z越大,view会出现在其他view的顶部

动画

新的动画Api,让你在UI控件里能创建触摸反馈,改变View的状态,切换activity的一系列自定义动画

具体有:

响应View的touch事件的触摸反馈动画

隐藏和显示View的循环展示动画

两个Activity间的切换动画

更自然的曲线运动的动画

使用View的状态更改动画,能改变一个或多个View的属性

在View的状态更改时显示状态列表动画

这些new animations Api,已内置在标准Widget中,如Button。在自定义view时也可使用这些api

图片

可伸缩的矢量图片不会丢失清晰度,并且单一颜色的app-icon是完美的

可定义一个bitmap作为透明度(alpha)和运行时的颜色

可对一个bitmap image取色,会取出它比较显眼的颜色

附RecyclerView的例子:

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.support.v7.widget.GridLayoutManager;
  4. import android.support.v7.widget.RecyclerView;
  5. import android.support.v7.widget.RecyclerView.LayoutParams;
  6. import android.view.LayoutInflater;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9. public class RecyclerViewActivity extends Activity {
  10. /*
  11. * recyclerview提供这些内置的布局管理器:
  12. * linearlayoutmanager              显示垂直滚动列表或水平的项目。
  13. * gridlayoutmanager                显示在一个网格项目。
  14. * staggeredgridlayoutmanager       显示在交错网格项目。
  15. * 自定义的布局管理器,需要继承recyclerview.layoutmanager类。
  16. *
  17. * add/remove items时的动画是默认启用的。
  18. * 自定义这些动画需要继承RecyclerView.ItemAnimator,并实现RecyclerView.setItemAnimator()
  19. */
  20. private RecyclerView mRecyclerView;
  21. private RecyclerView.Adapter mAdapter;
  22. private RecyclerView.LayoutManager mLayoutManager;
  23. private String[] myDataset;
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.recycler_view);
  28. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  29. // use this setting to improve performance if you know that changes
  30. // in content do not change the layout size of the RecyclerView
  31. mRecyclerView.setHasFixedSize(true);
  32. // use a linear layout manager
  33. //        mLayoutManager = new LinearLayoutManager(this);
  34. //        mLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, true);
  35. //true 表示,将layout内容反转
  36. mLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
  37. //HORIZONTAL 横向滚动显示内容   VERTICAL纵向
  38. //        mLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.HORIZONTAL, false);
  39. //方向也是指示滚动方向,例子中横向开头的数据交错了一点, 纵向的无交错
  40. //        mLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.HORIZONTAL);
  41. //        mLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
  42. mRecyclerView.setLayoutManager(mLayoutManager);
  43. //        mRecyclerView.setLayoutManager(new MyLayoutMnager()); //数据不显示,可能还需要重写什么东西。。
  44. // specify an adapter (see also next example)
  45. setDatas();
  46. mAdapter = new MyAdapter(myDataset);
  47. mRecyclerView.setAdapter(mAdapter);
  48. }
  49. private void setDatas() {
  50. int len = 200;
  51. myDataset = new String[len];
  52. for (int i = 0; i < len; i++) {
  53. switch (i%3) {
  54. case 0:
  55. myDataset[i] = "中国" + i;
  56. break;
  57. case 1:
  58. myDataset[i] = "美国" + i;
  59. break;
  60. case 2:
  61. myDataset[i] = "澳大利亚" + i;
  62. break;
  63. }
  64. }
  65. }
  66. class MyLayoutMnager extends RecyclerView.LayoutManager {
  67. @Override
  68. public LayoutParams generateDefaultLayoutParams() {
  69. LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  70. params.topMargin = 5;
  71. return params;
  72. }
  73. }
  74. class MyAdapter extends RecyclerView.Adapter<ViewHolder> {
  75. private String[] mDataset;
  76. // Provide a reference to the views for each data item
  77. // Complex data items may need more than one view per item, and
  78. // you provide access to all the views for a data item in a view holder
  79. // Provide a suitable constructor (depends on the kind of dataset)
  80. public MyAdapter(String[] myDataset) {
  81. mDataset = myDataset;
  82. }
  83. // Create new views (invoked by the layout manager)
  84. @Override
  85. public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  86. // create a new view
  87. TextView tv = (TextView) LayoutInflater.from(parent.getContext())
  88. .inflate(R.layout.my_text_view, parent, false);
  89. // set the view's size, margins, paddings and layout parameters
  90. //...
  91. ViewHolder vh = new ViewHolder(tv); //构建一个ViewHolder
  92. return vh;
  93. }
  94. // Replace the contents of a view (invoked by the layout manager)
  95. @Override
  96. public void onBindViewHolder(ViewHolder holder, int position) {
  97. // - get element from your dataset at this position
  98. // - replace the contents of the view with that element
  99. holder.mTextView.setText(mDataset[position]);
  100. }
  101. // Return the size of your dataset (invoked by the layout manager)
  102. @Override
  103. public int getItemCount() {
  104. return mDataset.length;
  105. }
  106. }
  107. static class ViewHolder extends RecyclerView.ViewHolder {
  108. // each data item is just a string in this case
  109. public TextView mTextView;
  110. public ViewHolder(TextView v) {
  111. super(v);
  112. mTextView = v;
  113. }
  114. }
  115. }

Android(Lollipop/5.0) Material Design(一) 简介的更多相关文章

  1. Android(Lollipop/5.0) Material Design(二) 入门指南

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简介 Android(Lollipop/5.0)Material Design(二) ...

  2. Android(Lollipop/5.0) Material Design(六) 使用图像

    Material Design列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二 ...

  3. Android(Lollipop/5.0) Material Design(一) 简单介绍

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design( ...

  4. Android(Lollipop/5.0) Material Design(四) 创建列表和卡片

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design( ...

  5. Android(Lollipop/5.0) Material Design(六) 自定义动画

    官网地址:https://developer.android.com/intl/zh-tw/training/material/animations.html 动画在Material设计中,为用户与a ...

  6. Android最佳实践之Material Design

    Material概述及主题 学习地址:http://developer.android.com/training/material/get-started.html 使用material design ...

  7. [转]Android 5.0——Material Design详解(动画篇)

    Material Design:Google推出的一个全新的设计语言,它的特点就是拟物扁平化. Material Design包含了很多内容,今天跟大家分享一下Material新增的动画: 在Andr ...

  8. Android Lollipop 5.0 经典新特性回顾

    *Tamic 专注移动开发! 更多文章请关注 http://blog.csdn.net/sk719887916 虽然Android已到了7.0 ,但是我们还是不能忘怀视觉革命性改变的5.0,今天回顾下 ...

  9. 《Android进阶之光》--Material Design

    接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...

随机推荐

  1. 【算法题12 解码方法decode way】

    1.来源LeetCode91 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请 ...

  2. url监控

    #!/usr/bin/env python #coding:utf-8 import MySQLdb,requests import time from datetime import datetim ...

  3. Keras实践:实现非线性回归

    Keras实践:实现非线性回归 代码 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" import ke ...

  4. JAVA寄存器

    所有进程都使用寄存器,Java虚拟机使用下列寄存器管理系统堆栈:    程序记数寄存器:跟踪程序执行的准确位置    堆栈指针寄存器:指示操作栈项    框架寄存器:指向当前执行的环境    变量寄存 ...

  5. HDU - 6437 Problem L.Videos 2018 Multi-University Training Contest 10 (最小费用最大流)

    题意:M个影片,其属性有开始时间S,结束时间T,类型op和权值val.有K个人,每个人可以看若干个时间不相交的影片,其获得的收益是这个影片的权值val,但如果观看的影片相邻为相同的属性,那么收益要减少 ...

  6. Linux 搭建 SVN

    一.yum 安装 subversion yum -y install subversion 二.创建svn版本库所在路径(建议放在opt.usr.home下) mkdir -p /usr/local/ ...

  7. [转]让你从零开始学会写爬虫的5个教程(Python)

    让你从零开始学会写爬虫的5个教程(Python)   写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个 ...

  8. 在线修改GTID模式

    在线修改GTID模式 1. 在每一台机器上执行命令 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN; 这是很重要的一步,必须确保服务器上没有违反GTID规范的 ...

  9. Python3:input()输入函数的用法

    Python3:input()输入函数的用法 一.简介 input这个函数,第一个参数是提示语,它默认是空的.在我们使用input的时候,会从标准输入中读取一个string,即字符串(请注意,这里很重 ...

  10. Docker_remote_api未授权访问漏洞

    docker remote  api主要的目的是取代命令行界面, docker client和docker daemon通过unix domain socket进行通信. 默认情况下,只有本机的roo ...