📜  cardview 设置背景不起作用 (1)

📅  最后修改于: 2023-12-03 15:29:56.526000             🧑  作者: Mango

CardView 设置背景不起作用

在使用Android中的CardView控件时,有时候会遇到设置背景不起作用的问题。这可能会导致UI的错误和不一致性。本文将介绍如何解决这个问题。

问题描述

在使用 CardView 控件时,我们可以通过设置 XML 属性或在代码中设置背景画板来改变 CardView 的背景颜色或背景图片。但是实际上,改变 背景画板 并没有对控件的背景造成任何影响,对控件的背景设置是无效的。

例如,你可以在 XML 中这样设置:

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    card_view:cardBackgroundColor="#ffffff"
    card_view:cardElevation="8dp"
    card_view:cardUseCompatPadding="true"
    android:background="#ffffff"
    >

或者在代码中这样设置:

val cardView = findViewById<CardView>(R.id.card_view)
cardView.setBackgroundResource(R.drawable.bg_card)

这些设置都看起来是可以让 CardView 显示不同的背景图片或颜色,但是实际上它们并没有生效。

解决方案

实际上,CardView 的背景要通过它的 child view 来设置。我们需要将一个 View 加入到 CardView 的布局中,并为这个 View 设置背景。

例如,你可以在 XML 中这样设置:

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    card_view:cardElevation="8dp"
    card_view:cardUseCompatPadding="true"
    >
    
    <LinearLayout
        android:id="@+id/bg_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        >
        
        <!-- 其他的子 View -->
        
    </LinearLayout>

</android.support.v7.widget.CardView>

或者在代码中这样设置:

val cardView = findViewById<CardView>(R.id.card_view)
val bgLayout = findViewById<LinearLayout>(R.id.bg_layout)
bgLayout.setBackgroundResource(R.drawable.bg_card)

这样就能够正确设置 CardView 的背景了。

结论

在 Android 中,CardView 的背景设置需要通过其 child view 来实现。

以上就是解决 CardView 设置背景不起作用的方法。

其他提示:

为了获得更好的效果,建议在 CardView 的 child view 中添加阴影效果:

<LinearLayout
    android:id="@+id/bg_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:elevation="2dp"
    >
    
    <!-- 其他的子 View -->
    
</LinearLayout>