动态更改CardView的背景颜色

时间:2014-09-28 10:03:41

标签: android material-design android-cardview

在文档中写道,可以使用card_view:cardBackgroundColor以XML格式设置CardView的BackgroundColor。但是,我找不到相应的方法来动态更改背景。

使用mCardView.setBackgroundColor(Color.argb(75, 102,80,67));会导致CardView丢失圆角和阴影。

4 个答案:

答案 0 :(得分:8)

为cardview的子类提供背景颜色会留下带衬垫的部分,以防卡片视图有任何颜色,没有颜色,这不是一个好方法。

动态更改卡片视图颜色,如下所示,假设您有一个适配器可以在卡片视图中加载列表。

在适配器Viewholder类

的构造函数中
mCardView = (CardView) itemView.findViewById(R.id.card_view);

在适配器类的onBindViewHolder方法中:

holder.mCardView.setCardBackgroundColor(Color.GREEN); // will change the background color of the card view to green

持有人是您的观察者类别的对象。

答案 1 :(得分:1)

通过设置CardView的孩子的背景,我可以很好地工作:

    <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:orientation="vertical"
            android:id="@+id/card_layout"
            android:layout_width="match_parent"
            android:layout_height="72dp"/>
    </android.support.v7.widget.CardView>

然后

    View cardLayout = mCardView.findViewById(R.id.card_layout);
    cardLayout.setBackgroundColor(Color.GREEN);

答案 2 :(得分:1)

仅使用 Color.GREEN 不会得到预期的结果。

使用ContextCompat.getColor(@NonNull context: Context, @ColorRes id: Int)

它返回与特定资源 ID 关联的颜色

View cardLayout = mCardView.findViewById(R.id.card_layout);
cardLayout.setBackgroundColor(ContextCompat.getColor(this, Color.GREEN));

答案 3 :(得分:-2)

即将发布的版本中将有一个API。目前,您唯一的选择是使用XML。