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
但这里的理解差距在哪里呢?
setCardBackgroundColor方法采用颜色参数,这意味着颜色以 ARGB 格式表示为 4 字节整数,但您传递到的方法R.color.LightCyan
不是颜色,而是应用程序/系统资源内的颜色索引。要获取颜色,您应该使用Color.argb(int alpha, int red, int green, int blue)或Resources.getColor(int index, Theme theme)或使用 ContextCompat 在旧平台上使用它。
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
归档时间: |
|
查看次数: |
12007 次 |
最近记录: |