卡片视图设置背景颜色

6

我试图在RecylerView的BindView holder中动态更改Cardview的背景颜色,就像这样。

holder.cardView.setCardBackgroundColor(R.color.LightCyan);

奇怪的是,背景应用的颜色(#E0FFFF-LightCyan)几乎与所应用的颜色(1F0000-几乎黑色)相反。

我在这里验证了几种颜色(链接),结果相同。

但是如果我设置成这样:

holder.cardView.setCardBackgroundColor(ContextCompat.getColor(this.mContext, R.color.LightCyan));

它完美地运作了。(是的,这是正确的设置方式)。

CardView XML:

<android.support.v7.widget.CardView
    android:id="@+id/cv"
    android:foreground="?selectableItemBackground"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

操作系统:Android 6.0 HTC

但这里存在哪些理解障碍呢?


1
这是您的间隙:http://developer.android.com/intl/es/reference/android/support/v4/content/ContextCompat.html - Aks4125
2个回答

7

明白了。谢谢你的信息。 - Madhukar Hebbar
1
我在测试中使用了硬编码颜色,但我不知道 alpha 因子是必需的。我将 card.setCardBackgroundColor(0xFF0000) 更改为 card.setCardBackgroundColor(0xFFFF0000),然后它就可以工作了。感谢提供信息。 - Sunshinator
很好的解释。结合下面的那个,我这样做了,效果非常好:cardView.setCardBackgroundColor(ContextCompat.getColor(context, R.color.gray_light)) - binwiederhier

6

2016年3月更新:

Android Support Library 23.2.1(最新版)添加了一个新的 getColor() 方法到 ContextCompat 中。

因此,请使用以下代码:

ContextCompat.getColor(context, R.color.your_color);

来自官方文档:

返回与特定资源ID相关联并针对当前主题进行样式化的颜色。

getColor(Context context, int id) 返回与特定资源ID关联的颜色, 从M开始,返回的颜色将为指定上下文的主题进行样式化。

请查看ContextCompat http://developer.android.com/intl/es/reference/android/support/v4/content/ContextCompat.html


是的,我正在使用那个。出于好奇,我正在尝试其他的方法。谢谢。 - Madhukar Hebbar
为我工作这个解决方案,谢谢。 - gabrielfalieri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接