Android AppCompat 21 Elevation

有没有什么方法可以将标高添加到前棒棒糖设备的View中,而无需将其包装在CardView

ViewCompat.setElevation(View, int)当前不会创build垫片。

现在模拟立面的唯一方法是在v21之前应用一个阴影。 定义你的风格/布局/绘制values并覆盖values-v21 。 对于button我使用样式覆盖。 对于布局,我通常会参考覆盖(使用@null来摆脱drawable)。

希望将来支持库的更新将增加垫片。

此reddit线程跟踪所述更新。

编辑

新的支持devise库实际上为浮动动作button创build垫片。

这是一个示例,如何在预棒棒糖设备上的Toolbar下添加阴影:

在这里输入图像说明

布局应该是这样的:

 <RelativeLayout android:id="@+id/toolbar_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:animateLayoutChanges="true" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /> <View android:id="@+id/toolbar_shadow" android:layout_width="match_parent" android:layout_height="@dimen/toolbar_shadow" android:layout_below="@id/toolbar" android:background="@drawable/toolbar_dropshadow" /> </RelativeLayout> 

而影子是:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:angle="90" android:endColor="#88444444" android:startColor="@android:color/transparent" /> </shape> 

我使用同样的效果,

  android:background="@android:drawable/dialog_holo_light_frame" 

我的testing结果:

在这里输入图像说明

参考 – https://stackoverflow.com/a/25683148/3879847

更新:如果你想改变这个可绘的颜色尝试@Irfan答案

https://stackoverflow.com/a/40815944/3879847

您现在可以使用模式xmlns:app="http://schemas.android.com/apk/res-auto"app:elevation

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> ... <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom|end" app:elevation="5dp">