【问题标题】:How to disable the shadow around card view in android如何在android中禁用卡片视图周围的阴影
【发布时间】:2014-11-06 09:40:33
【问题描述】:

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

我试过这个对我不起作用。

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

提前致谢。

【问题讨论】:

    标签: android android-cardview


    【解决方案1】:

    在 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

    【讨论】:

    • 这应该被接受为正确答案。我有同样的问题,这解决了它。
    • 我使用http://schemas.android.com/apk/res-auto 进行命名空间定义并且它有效。 http://schemas.android.com/tools 对我不起作用。有人知道原因吗?
    • @CerlinBoss 你的命名空间前缀是什么? card_viewapp?
    • 不要使用 card_view:cardElevation。用 app:cardElevation 替换它
    • @AhamadullahSaikat 回答对我有用。我正在使用 Androidx 库
    【解决方案2】:

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

    app:cardElevation="0dp"
    

    cardView.setCardElevation(0);
    

    并检查您使用的是最新的 CardView 库。

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      只需将这一行放在您的 CardView 中:

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

        希望对你有帮助!!!

        【讨论】:

        • +1 - app:cardPreventCornerOverlap="false" - 当它有圆角并且 cardElevation 设置为 0dp 时是必需的。
        【解决方案6】:

        这样试试可能对你有帮助,

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

        【讨论】:

        【解决方案7】:

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

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

        然后像这样设置海拔

        card_view:cardElevation="0dp"

        【讨论】:

          【解决方案8】:
           <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>
          

          【讨论】:

          • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
          • 请不要重复回答。即使您没有改变一点,多个问题的答案也可以相同。即使您发现类似的问题,您也应该在问题下方提及链接,而不是复制您的答案。重复here
          【解决方案9】:

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

          card_layout.cardElevation = 0F
          

          【讨论】:

            【解决方案10】:

            在我的例子中,只有带有建议高度和 backgroundColor 的背景 alpha 设置隐藏阴影边框:

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

            【讨论】:

            • 感谢 app:cardBackgroundColor="@android:color/transparent" 为我工作。
            【解决方案11】:

            你必须使用以下属性

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

            【讨论】:

              【解决方案12】:

              CardView 在初始化期间设置自己的高度,这将覆盖您从 XML 设置的任何内容。你应该把它作为一个错误提交到chek this

              @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
              【解决方案13】:
              app:cardElevation="0dp"
              android:outlineSpotShadowColor="@android:color/transparent"
              

              【讨论】:

                猜你喜欢
                • 2016-08-31
                • 2016-11-10
                • 1970-01-01
                • 1970-01-01
                • 2017-03-13
                • 2010-12-06
                • 2013-05-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多