材料设计 3 如何禁用高度覆盖?

4

Android Material 3引入了高度覆盖(色调覆盖)。如果提供或增加android:elevation,它会导致MaterialCard视图的背景颜色发生变化,并影响原始背景颜色。

  1. 如何为Material 3设置高度覆盖样式?
  2. 如何禁用Material 3的高度覆盖,以避免卡片视图的背景颜色更改(如果给视图提供了高度)。

文档中未提供有关设置或禁用高度覆盖的详细信息。

https://developer.android.com/jetpack/compose/designsystems/material3#elevation https://m3.material.io/styles/elevation/applying-elevation


1
我已经多次遇到高程叠加。你能否编辑你的问题并提供使用这个术语的链接?你是指 https://material.io/develop/android/theming/dark/ 吗? - CommonsWare
2
请参考以下链接详细了解 Material Design 中的高程设计:https://material.io/design/environment/elevation.html#elevation-in-material-design - Yunus Karakaya
感谢您的评论,CommonsWare。我已经进行了编辑。 - Khamidjon Khamidov
谢谢Yunus提供的链接,但我看不出它有很多用处;(我想知道它是如何使用的(在什么情况下)。 - Khamidjon Khamidov
1个回答

15

如您在文档中所述:

深色主题下,高度覆盖层是半透明白色(colorOnSurface)的叠加层,概念上放置在表面颜色之上。

此功能由库进行管理。
以下是使用MaterialCardViewapp:cardElevation="4dp"app:cardElevation="8dp"的示例。

浅色模式:

enter image description here

深色模式:

enter image description here

叠加层基于应用程序主题中定义的colorOnSurface
您可以通过在应用程序主题中添加以下代码来更改此颜色:

<item name="elevationOverlayColor">@color/...</item>

输入图像描述

您还可以在应用程序中使用主题来禁用此行为:

<item name="elevationOverlayEnabled">false</item>

Material Components Library中的许多组件支持在深色主题下的高程覆盖,但您也可以使用MaterialShapeDrawable在自定义视图中应用它。

例如,您可以使用LinearLayout

LinearLayout linearLayout1= findViewById(R.id....);
MaterialShapeDrawable shapeDrawableLL1 = 
MaterialShapeDrawable.createWithElevationOverlay(this, 4.0f );
ViewCompat.setBackground(linearLayout1,shapeDrawableLL1);

LinearLayout linearLayout2= findViewById(R.id....);
MaterialShapeDrawable shapeDrawableLL2 = 
MaterialShapeDrawable.createWithElevationOverlay(this, 16.0f );
ViewCompat.setBackground(linearLayout2,shapeDrawableLL2);

输入图像描述


2
非常感谢您的回答。我现在理解得更好了。 - Khamidjon Khamidov
1
谢谢。我以为可以在单个视图上设置“elevationOverlayEnabled=false”。现在我知道它必须在主题中设置。 - Izak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接