安卓 - CardView 的阴影如何加深

18

我正在使用'com.android.support:cardview-v7:23.4.0',尽管我看到了投影,但它不是深灰色的阴影,我想要一个更深的海拔阴影,但我没有找到任何属性可用来实现它,请问有什么思路吗?

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginBottom="8dp"
        app:cardElevation="8dp"
        app:cardPreventCornerOverlap="false"
        app:cardCornerRadius="1dp"
        app:cardUseCompatPadding="false">
        <include layout="@layout/any_layout"/>
    </android.support.v7.widget.CardView>

3
尝试使用 app:cardUseCompatPadding = "true" 属性。该属性可使卡片视图在不同版本的 Android 上具有一致的外观效果。 - karthik vishnu kumar
谢谢,但这不会使阴影变得更深。 - Billyjoker
你有解决方案吗? - Jithish P N
5个回答

46

我认为阴影强度是由app使用的底层主题定义的。因此,在API级别大于21时,您可以覆盖阴影的强度。在您的styles.xml中添加这两行额外的ambientShadowAlphaspotShadowAlpha。请注意,这些值的范围从0到1,其中0完全透明,而1完全不透明(几乎黑色):

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:fontFamily">@font/barlow_family</item>
    <item name="android:ambientShadowAlpha">1</item>
    <item name="android:spotShadowAlpha">1</item>

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:statusBarColor">@android:color/background_light</item>
</style>


1
这太棒了! - Peter Fortuin
1
非常感谢。这让我的一天变得更美好了。 - smbd uknow
1
这个可以工作,但会影响你应用程序中的许多其他组件。 - oziomajnr
1
有没有办法仅针对特定视图更改这些值? - shubham vashisht
1
@shubhamvashisht 是的,在这种情况下,您只需要创建一个新的主题,将父主题设置为此处所示的代码,并明确地将该主题应用于该视图。<LinearLayout style="@style/DarkTheme"> ... - Atharva Kulkarni
显示剩余3条评论

5
   <androidx.cardview.widget.CardView app:cardCornerRadius="10dp"
        app:cardUseCompatPadding="true"
        android:elevation="10dp"
        android:outlineSpotShadowColor="@color/black"
        android:outlineAmbientShadowColor="@color/grey"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

 app:cardUseCompatPadding="true"

试一试


5
仅适用于 API 28 及以上版本。 - deviant

1

您无法更改cardView的阴影颜色,但要使其变暗,可以使用app:cardElevation =“15dp”,例如

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_margin="10dp"
    app:cardElevation="15dp"
    > </android.support.v7.widget.CardView>

0

官方的CardView高度没有改变颜色的方法,可以看看这个Carbon


谢谢,但这需要升级我的Android Studio,并且它没有方便的集成,不能通过gradle依赖进行导入。 - Billyjoker
从技术上讲,我不想改变颜色,而是阿尔法阴影。 - Billyjoker

0

尝试使用这个解决方案。将您的CardView包装在RelativeLayout中,并为其设置背景。

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:background="#FFE7E2E4">
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:cardElevation="5dp"
        app:cardUseCompatPadding="true"/>
</RelativeLayout>

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