虽然6.0早就出了,但是呢,5.0用的都很少。
主要就是更换版本
较高,用户强烈要求才会更换。
Android 5.0新特性
- Material Theme
- View的阴影和裁剪
- Drawables图形资源
- Animations
- 新增控件-卡片和列表
http://developer.android.com/training/material/index.html
1.MaterialDesigh概述
材质设计,以抽象化的形式展现物理世界的特征。
Material 主题
-
系统自带的主题
- @android:style/Theme.Material
- @android:style/Theme.Material.Light
- @android:style/Theme.Material.Light.DarkActionBar
-
如何自定义主题
参见http://developer.android.com/training/material/theme.html
不同的Theme,不同的属性值。
-
常用的样式属性
<style name="RedTheme" parent="android:Theme.Material"> <!-- 状态栏颜色,会被statusBarColor效果覆盖--> <item name="android:colorPrimaryDark">@color/status_red</item> <!-- 状态栏颜色,继承自colorPrimaryDark --> <item name="android:statusBarColor">@color/status_red</item> <!-- actionBar颜色 --> <item name="android:colorPrimary">@color/action_red</item> <!-- 背景颜色 --> <item name="android:windowBackground">@color/window_bg_red</item> <!-- 底部栏颜色 --> <item name="android:navigationBarColor">@color/navigation_red</item> <!-- ListView的分割线颜色,switch滑动区域色--> <item name="android:colorForeground">@color/fg_red</item> <!-- popMenu的背景色 --> <item name="android:colorBackground">@color/bg_red</item> <!-- 控件默认颜色 ,效果会被colorControlActivated取代 --> <item name="android:colorAccent">@color/control_activated_red</item> <!-- 控件默认时颜色 --> <item name="android:colorControlNormal">@color/control_normal_red</item> <!-- 控件按压时颜色,会影响水波纹效果,继承自colorAccent --> <item name="android:colorControlHighlight">@color/control_highlight_red</item> <!-- 控件选中时颜色 --> <item name="android:colorControlActivated">@color/control_activated_red</item> <!-- Button的默认背景 --> <item name="android:colorButtonNormal">@color/button_normal_red</item> <!-- Button,textView的文字颜色 --> <item name="android:textColor">@color/white_text</item> <!-- RadioButton checkbox等控件的文字 --> <item name="android:textColorPrimaryDisableOnly">@color/white_text</item> <!-- actionBar的标题文字颜色 --> <item name="android:textColorPrimary">@color/white_text</item> </style>
2.阴影和裁剪
Z轴属性
-
Z = elevation + translationZ
android:elevation //静态Z轴的高度。相对于父控件的高度 android:translationZ //Z轴偏移的高度。
-
高度决定了View的遮盖关系,遮盖关系决定绘制时机。
阴影轮廓
android:outlineProvider:
none:不显示阴影
background :按照显示区域来绘制阴影
bounds :在View的边界描绘阴影
paddedBounds: 在View边界描绘阴影,但会忽略paddingTop和paddingLeft
View都是矩形的,阴影默认是沿着背景的边界绘制。如果背景是矩形了自然没有问题。 如果是圆形的,分两种情况:
- 通过shape定义的,系统可以识别出真实边界,阴影绘制没有问题.
- 带有透明通道的png图片,会当成矩形绘制阴影。因为系统无法排除透明通道,识别出真实的边界,
为了避免圆形的View显示矩形的阴影,,View增加了一个新的描述来指明内容显示的形状,这就是轮廓。
-
布局设置:
android:outlineProvider="none|background|bounds|paddedBounds" none 不显示阴影 background :按照显示区域来绘制阴影 bounds :在View的边界描绘阴影 paddedBounds: 在View边界描绘阴影,但会计算paddingTop和paddingLeft
-
代码设置:
圆形png图片因为无法排除透明通道,无法识别出真实边界,所以可以自定义,代码提供轮廓
View.setOutlineProvider(new ViewOutlineProvide(){ public void getOutline(View view, Outline outline) { //矩形,圆形,圆角矩形,Path。除了正常的阴影,也可以自定义奇葩的阴影效果 outline.setOval(0, 0, view.getWidth(), view.getHeight()); } });
轮廓裁剪
由于轮廓可以自定义,当轮廓小于View的大小,View并不会变小。如果希望View大小跟轮廓匹配,可以裁剪View的大小以适应轮廓,这样也可以通过裁剪生成新的形状。
Outline.canClip();//是否可以被裁剪。目前支持矩形,圆形,圆角矩形
View.setClipToOutline(true);//允许裁剪View大小以适应轮廓
- 只能往小了裁,不能往大了裁。