DrawerLayout setDrawerShadow 和 setDrawerElevation 均不起作用(支持 23.0.1)

Der*_*rek 1 android android-support-library material-design

更新支持库后,我试图在导航抽屉上设置阴影,但由于某种原因,没有任何效果,我很困惑。

我遇到了这个问题,但它的解决方案是仅使用 setElevation ,这对我来说也不起作用:https://code.google.com/p/android/issues/detail ?id=184434

确实没有太多代码可发布,但以下是我所说的供参考:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;

if (currentapiVersion >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    mDrawerLayout.setDrawerElevation(25f);
} else {
    mDrawerLayout.setDrawerShadow(R.drawable.left_drawer_shadow, GravityCompat.START);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 ScrimInsetsFrameLayout 但这不应该导致问题 AFAIKT。

有任何想法吗?

小智 5

可能发生了什么:

由于支持 lib 23 v21+ 设备,在这种情况下会忽略自定义绘图。使用本机内置的高程阴影。参见:本期

但问题在于:透明元素没有阴影。

默认情况下,高程阴影是从视图背景轮廓绘制的。如果视图没有背景,则不会显示阴影。

如果您的视图没有自己的背景,请使用轮廓提供程序,例如:

android:outlineProvider="bounds"
Run Code Online (Sandbox Code Playgroud)

应该可以解决问题。该文档可以在此处找到ViewOutlineProvider。简而言之:

视图构建其轮廓的接口,用于阴影投射和剪切。

一些更多信息和深入解释在这里:Android“elevation”not shown ashadow