Material Design 针对界面元素引入了高度。高度有助于用户了解每个元素的相对重要程度,并集中精力解决当前任务。
某个视图的高度(由 Z 属性表示)决定了其阴影的视觉外观:视图的 Z 值越大,则投射的阴影越大、越柔和。Z 值较大的视图会遮挡 Z 值较小的视图;不过,视图的 Z 值不会影响视图的大小。

阴影由具有高度的视图的父级绘制,因此需要接受标准视图裁剪(默认由父级裁剪)。
此外,高度还有助于创建下面这样的动画:在执行某些操作时微件暂时升高到视图平面上方。
如需详细了解 Material Design 中的高度,请参阅 3D 空间中的对象。
指定视图高度
视图的 Z 值包括两个组件:
- 高度:静态组件。
- 平移:用于动画的动态组件。
Z = elevation + translationZ

图 1 - 不同视图高度的阴影。
要设置某个视图的默认(静止)高度,请在 XML 布局中使用 android:elevation
属性。如果要在 Activity 的代码中设置视图高度,请使用 View.setElevation()
方法。
如果要设置视图转换,请使用 View.setTranslationZ()
方法。
全新的 ViewPropertyAnimator.z()
与 ViewPropertyAnimator.translationZ()
方法让您能够轻松地为视图高度添加动画。如果要了解更多信息,请参阅 ViewPropertyAnimator
的 API 参考以及属性动画开发者指南。
您也可使用 StateListAnimator
以说明性方式指定这些动画。这在状态变化触发动画的情况(例如用户按下按钮时)下尤为有用。如需了解详情,请参阅为视图状态变化添加动画效果。
Z 值以 dp(密度无关像素)为单位。
自定义视图阴影和轮廓
视图的背景可绘制边界决定了其阴影的默认形状。轮廓表示图形对象的外部形状,并可定义轻触反馈的波纹区域。
以下面的视图(已使用背景可绘制对象进行定义)为例:
<TextView android:id="@+id/myview" ... android:elevation="2dp" android:background="@drawable/myrect" />
背景可绘制对象已定义为一个圆角矩形:
<!-- res/drawable/myrect.xml --> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#42000000" /> <corners android:radius="5dp" /> </shape>
该视图会投射圆角阴影,因为背景可绘制对象定义了视图的轮廓。提供自定义轮廓会覆盖视图阴影的默认形状。
要在代码中定义视图的自定义轮廓,请执行以下操作:
- 扩展
ViewOutlineProvider
类。 - 替代
getOutline()
方法。 - 利用
View.setOutlineProvider()
方法向您的视图指定新的轮廓提供程序。
您可使用 Outline
类中的方法创建带有圆角的椭圆形和矩形轮廓。视图的默认轮廓提供程序会从视图的背景中获取轮廓。如果要防止视图投射阴影,请将其轮廓提供程序设置为 null
。
裁剪视图
通过裁剪视图,您可以轻松地更改视图的形状。您可以裁剪视图以便与其他设计元素保持一致,也可以根据用户输入更改视图的形状。您可使用 View.setClipToOutline()
方法或 android:clipToOutline
属性将视图裁剪至其轮廓区域。由 Outline.canClip()
方法所决定,仅有矩形、圆形和圆角矩形轮廓支持裁剪。
如果要将视图裁剪至可绘制对象的形状,请将可绘制对象设置为视图背景(如上所示)并调用 View.setClipToOutline()
方法。
裁剪视图是一项成本高昂的操作,因此请勿为用于裁剪视图的形状添加动画效果。如需实现这种效果,请使用揭露效果动画。