Cardview 设置背景颜色

Mad*_*bar 6 xml android android-layout android-studio android-cardview

我正在尝试像这样在 RecylerView 的 Bindview 持有者中动态更改 Cardview 背景颜色。

holder.cardView.setCardBackgroundColor(R.color.LightCyan);
Run Code Online (Sandbox Code Playgroud)

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

我在这里验证了几种颜色,结果是相同的。

但如果我这样设置

holder.cardView.setCardBackgroundColor(ContextCompat.getColor(this.mContext, R.color.LightCyan));
Run Code Online (Sandbox Code Playgroud)

它工作得很好。(是的,这是正确的设置方法)。

卡片视图 XML:

<android.support.v7.widget.CardView
    android:id="@+id/cv"
    android:foreground="?selectableItemBackground"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
Run Code Online (Sandbox Code Playgroud)

操作系统:Android 6.0 HTC

但这里的理解差距在哪里呢?

cur*_*hov 7

setCardBackgroundColor方法采用颜色参数,这意味着颜色以 ARGB 格式表示为 4 字节整数,但您传递到的方法R.color.LightCyan不是颜色,而是应用程序/系统资源内的颜色索引。要获取颜色,您应该使用Color.argb(int alpha, int red, int green, int blue)Resources.getColor(int index, Theme theme)或使用 ContextCompat 在旧平台上使用它。


Ami*_*ela 6

2016 年 3 月更新

Android 支持库 23.2.1(最新),ContextCompat 中添加了新的getColor()方法。

所以,使用:

ContextCompat.getColor(context, R.color.your_color);
Run Code Online (Sandbox Code Playgroud)

来自官方文档:

返回与特定资源 ID 关联并针对当前主题设置样式的颜色。

getColor(Context context, int id)返回与特定资源 ID 关联的颜色。从 M 开始,返回的颜色将针对指定的 Context 主题进行样式设置。

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