【问题标题】:Remove elevation shadow without removing elevation itself移除高程阴影而不移除高程本身
【发布时间】:2018-05-23 12:47:10
【问题描述】:

有没有办法让AppBarLayout 不产生阴影并保持其高度?

<android.support.design.widget.AppBarLayout
        app:elevation="0dp">

【问题讨论】:

  • 为什么要保持高程没有阴影?
  • @azizbekian 因为我有一个嵌套滚动内容,我需要在栏后面滚动和一个半透明的图像视图标题
  • 如果您让所有这些视图具有相同的高程值,那么它们最终将处于一个 z 顺序上,因此不会显示阴影。
  • @azizbekian 确实,但不幸的是,在这种情况下,我的嵌套滚动内容超出了 AppBarLayout 中的 ImageView
  • 以某种方式重构你的布局,AppBarLayoutxml 文件的末尾声明,因此它将始终绘制在NestedScrollView 之上。

标签: android android-toolbar shadow android-appbarlayout android-elevation


【解决方案1】:

我刚刚遇到了同样的问题,这就是为我解决的问题:

val withElevationNoShadow = view.findViewById<*your view type*>(*your view id*)
withElevationNoShadow.outlineProvider = null

请记住,上面的代码是 Kotlin,但 Java 几乎是相同的。

这是可行的,因为阴影是由ViewOutlineProviders 绘制的。通过将视图的ViewOutlineProvider 设置为null,您可以消除默认阴影。

有关ViewOutlineProviders 的更多信息,请查看

https://developer.android.com/reference/android/view/ViewOutlineProvider

https://developer.android.com/training/material/shadows-clipping

【讨论】:

  • 很有魅力,这应该是公认的答案。
【解决方案2】:

要完成 M.Sandholtz 的回答,您还可以在 XML 中定义它,其中 outlineProvider="none"。

<View
    android:id="@+id/viewElevationNoShadow"
    android:outlineProvider="none"
    android:elevation="4dp"/>

【讨论】:

  • 仅适用于 API >= v21
猜你喜欢
  • 2020-12-31
  • 2017-09-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
相关资源
最近更新 更多