CardView设置背景总显示灰色的解决

今天在做银行卡列表的时候打算用CardView的实现,然后不同的银行卡显示不同背景色,本来打算用取色器去拾取不同的银行卡图标的亮色调,但是为了简单我就自己在colors.xml弄了四个颜色,然后将期放到数组里,通多随机数做下标取出。但是问题来了,每次都显示一种颜色,而且还不在我设置的颜色之内,我就很纳闷。所以我就大概跟了一下源码,大概明白是怎么回事了。

一直不变的效果如下:
CardView设置背景总显示灰色的解决_第1张图片
我的错误代码如下:

int[] bg_colors={R.color.bank_card_1,R.color.bank_card_2,R.color.bank_card_3,R.color.bank_card_4};
 holder.card_view.setCardBackgroundColor(bg_colors[mRandom.nextInt(mLength)]);

这个灰色在源码中对应的是一个颜色十六进制:

public static final int cardview_dark_background = 0x7f0c001f;

其实这里是维护了一个默认值,根据不同的主题取不同的值:
这里写图片描述

看完这个图我就知道我写错了,正确的写法应该是这样的:

int[] bg_colors={R.color.bank_card_1,R.color.bank_card_2,R.color.bank_card_3,R.color.bank_card_4};
  int color = ContextCompat.getColor(context, bg_colors[mRandom.nextInt(mLength)]);
        holder.card_view.setCardBackgroundColor(color);

刚开始我传的就是id编号,并不是一个色值,所以才会做默认处理。去跟getColor你可以知道颜色和主题是进行绑定的:

 @Nullable
    public final int getColor(int id) {
        return getResources().getColor(id, getTheme());
    }

这里确实是我的写法有误,但是我也明白很多,最终结果就是这样的:

CardView设置背景总显示灰色的解决_第2张图片

你可能感兴趣的:(android)