如何在安卓中禁用卡片视图周围的阴影效果

107

我正在开发一个演示应用程序,其中我正在使用支持库的卡片视图。默认情况下,它会在周围添加阴影。我想要删除这个阴影,让它看起来简单。

我尝试过以下方法(对我来说不起作用):

CardView cardView = (CardView) v.findViewById(R.id.cardView);
cardView.setElevation(0);

做完这些后,我遇到了崩溃问题。

11-06 15:12:17.018: E/AndroidRuntime(24315): FATAL EXCEPTION: main
11-06 15:12:17.018: E/AndroidRuntime(24315): Process: com.xyz, PID: 24315
11-06 15:12:17.018: E/AndroidRuntime(24315): java.lang.NoSuchMethodError: android.support.v7.widget.CardView.setElevation
11-06 15:12:17.018: E/AndroidRuntime(24315):    at com.xyz.adapters.RecycleViewAdapter.onCreateViewHolder(RecycleViewAdapter.java:85)
11-06 15:12:17.018: E/AndroidRuntime(24315):    at com.xyz.adapters.RecycleViewAdapter.onCreateViewHolder(RecycleViewAdapter.java:1)
11-06 15:12:17.018: E/AndroidRuntime(24315):    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:2915)
11-06 15:12:17.018: E/AndroidRuntime(24315):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:2511)
11-06 15:12:17.018: E/AndroidRuntime(24315):    at android.support.v7.widget.LinearLayoutManager$RenderState.next(LinearLayoutManager.java:1425)
11-06 15:12:17.018: E/AndroidRuntime(24315):    at android.support.v7.widget.LinearLayoutManager$RenderState.next(LinearLayoutManager.java:1425)

布局文件.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res/com.xyz"
    android:id="@+id/cardView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:orientation="horizontal" >
13个回答

166

在XML中使用这个属性

card_view:cardElevation="0dp"

记得在您的根布局中添加xmlns:card_view="http://schemas.android.com/tools".

或者您可以通过编程方式调用cardView.setCardElevation(0)来禁用阴影。

cardView.setElevation()方法和CardView属性android:elevation将在Android 5.0之前的平台上抛出java.lang.NoSuchMethodError异常。


1
这应该被接受为正确答案。我遇到了同样的问题,而这个解决了它。 - superpuccio
2
我使用了http://schemas.android.com/apk/res-auto来定义命名空间,它起作用了。但是http://schemas.android.com/tools对我无效。有人知道原因吗? - Cerlin
5
请勿使用 card_view:cardElevation,改用 app:cardElevation。 - Ahamadullah Saikat
@CerlinBoss,“tools”命名空间是用于设计目的的。它允许您在设计时间模拟视图的实际行为。例如,您可以使用“tools:text”属性来设置设计期间可见的文本,而不是“android:text”。 - Clement Osei Tano
2
@AhamadullahSaikat的答案对我有用。我正在使用Androidx库。 - ylinkz
显示剩余3条评论

95

尝试将海拔高度放入Xml中。

app:cardElevation="0dp"
cardView.setCardElevation(0);

请确认您正在使用最新的CardView库。


这些属性在最新的库中可用,但当我使用最新版本时,我的应用程序会崩溃,并出现以下错误:https://dev59.com/TITba4cB1Zd3GeqP-8YE - N Sharma

54

使用app:cardElevation="0dp",不要使用app:elevation="0dp"


21

只需将此行代码放入您的CardView中:

app:cardElevation="0dp"

希望它能对你有所帮助。


9
你可以使用XML格式来表示它:
<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    app:cardElevation="0dp"
    app:cardCornerRadius="0.5dp"
    app:cardPreventCornerOverlap="false"
    app:cardUseCompatPadding="true"
    >
   </android.support.v7.widget.CardView>

希望能对您有所帮助!!!


1
当具有圆角且cardElevation设置为0dp时,需要使用+1 - app:cardPreventCornerOverlap="false"。 - Tarlan Ahad

5
 <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:cardElevation="0dp"
        app:cardCornerRadius="2dp">
....`
 </android.support.v7.widget.CardView>

1
为了帮助 OP 解决当前的问题,可以在回答中添加一些解释说明。 - ρяσѕρєя K
1
请不要发布重复回答。即使您没有做出任何更改,同一答案也可能适用于多个问题。即使您找到了相似的问题,也应该在问题下方提供一个链接,而不是复制您的答案。重复这里 - Rohan Khude

5
试着像这样做可能会对你有帮助:
CardView cardView = (CardView) v.findViewById(R.id.cardView);
cardView.setCardElevation(0);

没有setCardElevation这样的方法。 - N Sharma
这个方法在最新的库中可用,但当我使用新库时,我得到了这个https://dev59.com/TITba4cB1Zd3GeqP-8YE。 - N Sharma

5

您应该首先将以下内容添加到您的父布局中:

xmlns:card_view="http://schemas.android.com/tools"

然后像这样设置高程:

card_view:cardElevation="0dp"


4
如果有人在寻找Kotlin答案,那么这个对我有效。
card_layout.cardElevation = 0F

3
你需要使用以下属性。
<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardElevation="0dp"
    app:cardCornerRadius="0.5dp"
    app:cardPreventCornerOverlap="false"
    >
   </android.support.v7.widget.CardView>

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