CardView有一个属性card_view:cardBackgroundColor
来定义背景颜色。
这个属性工作正常。
与此同时,还没有一种动态改变颜色的方法。
我刚试过像以下的解决方案:
mCardView.setBackgroundColor(...);
或使用cardView中的布局
<android.support.v7.widget.CardView>
<LinearLayout
android:id="@+id/inside_layout">
</android.support.v7.widget.CardView>
View insideLayout = mCardView.findViewById(R.id.inside_layout);
cardLayout.setBackgroundColor(XXXX);
这些解决方案不起作用,因为该卡有一张cardCornerRadius。
答案 0 :(得分:231)
您正在寻找的是:
CardView card = ...
card.setCardBackgroundColor(color);
在XML
中 card_view:cardBackgroundColor="@android:color/white"
答案 1 :(得分:116)
使用属性card_view:cardBackgroundColor:
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_gravity="center"
card_view:cardCornerRadius="4dp"
android:layout_margin="10dp"
card_view:cardBackgroundColor="#fff"
>
答案 2 :(得分:21)
您可以在XML中使用它
card_view:cardBackgroundColor="@android:color/white"
或Java中的这个
cardView.setCardBackgroundColor(Color.WHITE);
答案 3 :(得分:17)
我使用此代码以编程方式设置:
card.setCardBackgroundColor(color);
或者在XML中,您可以使用以下代码:
card_view:cardBackgroundColor="@android:color/white"
答案 4 :(得分:8)
在initialize
方法中设置的方式使用受保护的RoundRectDrawable
类,如下所示:
RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, cardView.getRadius());
cardView.setBackgroundDrawable(backgroundDrawable);
它不漂亮,但你可以扩展那个类。类似的东西:
package android.support.v7.widget;
public class MyRoundRectDrawable extends RoundRectDrawable {
public MyRoundRectDrawable(int backgroundColor, float radius) {
super(backgroundColor, radius);
}
}
然后:
final MyRoundRectDrawable backgroundDrawable = new MyRoundRectDrawable(bgColor,
mCardView.getRadius());
mCardView.setBackgroundDrawable(backgroundDrawable);
修改强>
这不会给你影子&lt; API 21,因此您必须对RoundRectDrawableWithShadow
执行相同的操作。
似乎没有更好的方法来做到这一点。
答案 5 :(得分:8)
这里有点晚了&amp;部分偏离主题,因为这不是以编程方式,但我发现最好为小部件设置样式,你可以为CardView
创建一个样式,它将保持你的xml清洁......
<style name="MyCardViewStyle" parent="CardView">
<!-- Card background color -->
<item name="cardBackgroundColor">@android:color/white</item>
<!-- Ripple for API 21 of android, and regular selector on older -->
<item name="android:foreground">?android:selectableItemBackground</item>
<!-- Resting Elevation from Material guidelines -->
<item name="cardElevation">2dp</item>
<!-- Add corner Radius -->
<item name="cardCornerRadius">2dp</item>
<item name="android:clickable">true</item>
<item name="android:layout_margin">8dp</item>
</style>
这是使用android.support.v7.widget.CardView
然后在布局文件中设置样式:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
style="@style/MyCardViewStyle">
<!-- Other fields-->
</android.support.v7.widget.CardView>
您需要使用Android studio通过gradle导入appcompat-v7库:
dependencies {
compile 'com.android.support:appcompat-v7:22.2.0'
}
希望这会有所帮助。快乐的编码
答案 6 :(得分:3)
我在recylerView中格式化CardView时遇到了类似的问题。
我得到了这个简单的解决方案,不确定它是否是最佳解决方案,但它对我有用。
mv_cardView.getBackground().setTint(Color.BLUE)
它获取了cardView的背景Drawable并对其进行着色。
答案 7 :(得分:2)
在 JAVA
中cardView.setCardBackgroundColor(0xFFFEFEFE);
android使用ARGB颜色。你可以这样使用(0xFF + RGB COLOR) - 硬编码颜色。
答案 8 :(得分:2)
我尝试以编程方式创建一个cardview时遇到了同样的问题,奇怪的是,查看文档https://developer.android.com/reference/android/support/v7/widget/CardView.html#setCardBackgroundColor%28int%29,谷歌的人公开了api来改变卡片视图的背景颜色,但奇怪的是我没有成功在支持库中访问它,所以这对我有用:
CardViewBuilder.java
mBaseLayout = new FrameLayout(context);
// FrameLayout Params
FrameLayout.LayoutParams baseLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
mBaseLayout.setLayoutParams(baseLayoutParams);
// Create the card view.
mCardview = new CardView(context);
mCardview.setCardElevation(4f);
mCardview.setRadius(8f);
mCardview.setPreventCornerOverlap(true); // The default value for that attribute is by default TRUE, but i reset it to true to make it clear for you guys
CardView.LayoutParams cardLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
cardLayoutParams.setMargins(12, 0, 12, 0);
mCardview.setLayoutParams(cardLayoutParams);
// Add the card view to the BaseLayout
mBaseLayout.addView(mCardview);
// Create a child view for the cardView that match it's parent size both vertically and horizontally
// Here i create a horizontal linearlayout, you can instantiate the view of your choice
mFilterContainer = new LinearLayout(context);
mFilterContainer.setOrientation(LinearLayout.HORIZONTAL);
mFilterContainer.setPadding(8, 8, 8, 8);
mFilterContainer.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER));
// And here is the magic to get everything working
// I create a background drawable for this view that have the required background color
// and match the rounded radius of the cardview to have it fit in.
mFilterContainer.setBackgroundResource(R.drawable.filter_container_background);
// Add the horizontal linearlayout to the cardview.
mCardview.addView(mFilterContainer);
filter_container_background.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp"/>
<solid android:color="@android:color/white"/>
这样做我成功地保持了卡片视图阴影和圆角。
答案 9 :(得分:2)
您可以在Java中使用它。
cardView.setCardBackgroundColor(Color.parseColor(“#cac8a0”));
答案 10 :(得分:2)
在Kotlin中,我可以这样更改背景颜色:
var card: CardView = itemView.findViewById(com.mullr.neurd.R.id.learn_def_card)
card.setCardBackgroundColor(ContextCompat.getColor(main,R.color.selected))
然后,如果要删除颜色,可以执行以下操作:
card.setCardBackgroundColor(Color.TRANSPARENT)
使用此方法,我可以创建选择动画。
https://gfycat.com/equalcarefreekitten
答案 11 :(得分:1)
对我来说,最简单的方法是(科特琳)
card_item.backgroundTintList = ColorStateList.valueOf(Color.parseColor("#fc4041"))
答案 12 :(得分:0)
我在 Xamarin.Android - VS (2017)上遇到了同样的问题
对我有用的解决方案:
在您的XML文件中添加:
xmlns:card_view="http://schemas.android.com/apk/res-auto"
并在android.support.v7.widget.CardView
元素中添加此适当性:
card_view:cardBackgroundColor="#ffb4b4"
(即)
<android.support.v7.widget.CardView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="12dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="1dp"
card_view:cardPreventCornerOverlap="false"
card_view:cardBackgroundColor="#ffb4b4" />
您还可以添加cardElevation
和cardElevation
。
如果您想以编程方式编辑cardview
,则只需使用以下代码:
对于(C#)
cvBianca = FindViewById<Android.Support.V7.Widget.CardView>(Resource.Id.cv_bianca);
cvBianca.Elevation = 14;
cvBianca.Radius = 14;
cvBianca.PreventCornerOverlap = true;
cvBianca.SetCardBackgroundColor(Color.Red);
现在,您可以更改背景颜色以编程方式,而不会丢失边框,边角半径和高程。
答案 13 :(得分:0)
Cardview
有点y。我的结构中有颜色列表,模型就像
class ModelColor : Serializable {
var id: Int? = 0
var title: String? = ""
var color: Int? = 0// HERE IS THE COLOR FIELD WE WILL USE
constructor(id: Int?, title: String?, color: Int?) {
this.id = id
this.title = title
this.color = color
}
}
为模型加载颜色,结构的最后一项取自R.color
list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))
最后,您可以设置BackgrıundResource
cv_add_goal_choose_color.setBackgroundResource(color)
答案 14 :(得分:0)
我终于有机会留下了。这是C#,Xamarin.Android
在ViewHolder中:
CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);
在适配器中
vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));
答案 15 :(得分:0)
您可以在下面使用
cardview.setBackgroundColor(Color.parseColor("#EAEDED"));
答案 16 :(得分:0)
在Kotlin中这很简单。使用ColorStateList更改名片视图的颜色
var color = R.color.green;
cardView.setCardBackgroundColor(context.colorList(color));
ColorStateList的kotlin扩展名:
fun Context.colorList(id: Int): ColorStateList {
return ColorStateList.valueOf(ContextCompat.getColor(this, color))
}
答案 17 :(得分:0)
您可以在 XML 中使用它
card_view:cardBackgroundColor="@android:color/white"
或以编程方式
cardView.setCardBackgroundColor(ContextCompat.getColor(this, R.color.my_color));
答案 18 :(得分:0)
如果你想改变卡片的色调,试试这个代码,它对我有用。 对我来说,这段代码有效。我将它与卡片和图像视图一起使用,但我认为它可以在任何视图中工作以更改其色调颜色。 cardBookmark 是我的 cardView 名称。
var cardDrawable: Drawable = binding.cardBookmark.background
cardDrawable = DrawableCompat.wrap(cardDrawable)
DrawableCompat.setTint(cardDrawable, resources.getColor(R.color.shuffleColor))
binding.cardBookmark.background = cardDrawable
答案 19 :(得分:-1)
尝试轻松实现
<android.support.v7.widget.CardView
card_view:cardBackgroundColor="#fff"
card_view:cardCornerRadius="9dp"
card_view:cardElevation="4dp"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="10dp"
android:paddingBottom="10dp"
xmlns:card_view="http://schemas.android.com/apk/res-auto">