如何在Android中禁用卡片视图周围的阴影


70

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

我尝试了这个不适合我的方法。

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)

layout.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" >

提前致谢。

Answers:


128

在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
这应该被认为是正确的答案。我有同样的问题,并解决了它。
matteopuc

2
我用于http://schemas.android.com/apk/res-auto命名空间定义,它的工作。http://schemas.android.com/tools没有为我工作。有人知道原因吗?
Cerlin

@CerlinBoss您的命名空间前缀是什么?card_view还是app
Loyea

3
不要使用card_view:cardElevation。将其替换为app:cardElevation
Ahamadullah Saikat

2
@AhamadullahSaikat答案对我有用。我正在使用Androidx库
ylinkz '19




5

您应该首先将其添加到父布局中

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

然后像这样设置高程

card_view:cardElevation="0dp"


5

您可以使用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>

希望对您有帮助!



4
 <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在固定电流问题
ρяσѕρєяķ

1
请不要重复回答。即使您没有改变,多个问题的答案也一样。即使您找到类似的问题,也不要复制答案,而应在问题下方提及一个链接。在此处
Rohan Khude

2

您必须使用以下属性

<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>

1

在我的情况下,只有具有建议的高程和backgroundColor的背景alpha设置才会隐藏阴影边框:

 this.setCardElevation(0);
 this.setCardBackgroundColor(getContext().getResources().getColor(android.R.color.transparent));
 this.getBackground().setAlpha(0);

1

如果有人在寻找Kotlin答案,那么这对我有用

card_layout.cardElevation = 0F

0

CardView在初始化期间设置自己的海拔,它将覆盖您通过XML设置的任何海拔。您应该提交这是在错误赤本

@Override
public void initialize(CardViewDelegate cardView, Context context, int backgroundColor,
        float radius) {
    cardView.setBackgroundDrawable(new RoundRectDrawable(backgroundColor, radius));
    View view = (View) cardView;
    view.setClipToOutline(true);
    view.setElevation(context.getResources().getDimension(R.dimen.cardview_elevation));
}

@Williams,这是CardView源代码-如果您要创建自己的CardView
d4c0d312'9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.