以编程方式更改 CardView 的背景色

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);

这些解决方案不起作用,因为该卡有一个卡 CornerRadius。

175890 次浏览

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);

剪辑

这不会给你 < API 21上的阴影,所以你必须对 RoundRectDrawableWithShadow做同样的事情。

似乎没有更好的办法了。

你要找的是:

CardView card = ...
card.setCardBackgroundColor(color);

XML 格式

 card_view:cardBackgroundColor="@android:color/white"

更新: 在 XML 中

app:cardBackgroundColor="@android:color/white"

我在尝试程序化地创建 cardview 时遇到了同样的问题,奇怪的是,看看文档 https://developer.android.com/reference/android/support/v7/widget/CardView.html#setCardBackgroundColor%28int%29,Google 的人公开了 api 来改变一个 cardview 的背景颜色,但奇怪的是,我在支持库中没有成功访问它,所以下面是对我有效的方法:

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 _ behind. xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp"/>
<solid android:color="@android:color/white"/>

做到这一点,我成功地保持了阴影和圆角。

使用属性 card _ view:

<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"
>

您可以在 XML 中使用它

card_view:cardBackgroundColor="@android:color/white"

或者用爪哇语说

cardView.setCardBackgroundColor(Color.WHITE);

我使用这段代码以编程方式进行设置:

card.setCardBackgroundColor(color);

或者在 XML 中可以使用以下代码:

card_view:cardBackgroundColor="@android:color/white"

这里有点晚和部分偏离主题,因为这不是编程,但我发现最好的设置样式的小部件,你可以这样做的 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 via gradle 导入 appcompat-v7库:

 dependencies {
compile 'com.android.support:appcompat-v7:22.2.0'
}

希望这能帮上忙,编程愉快

JAVA

cardView.setCardBackgroundColor(0xFFFEFEFE);

Android 使用 ARGB 颜色。你可以像这样使用(0xFF + RGB COLOR)——硬编码颜色。

试试吧,很容易的

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
card_view:cardBackgroundColor="#fff"
card_view:cardCornerRadius="9dp"
card_view:cardElevation="4dp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="10dp"
android:paddingBottom="10dp">

我在 Xamarin 机器人 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" />

也可以添加 cardElevationcardElevation

如果你想编辑 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);

现在你可以改变背景颜色 程序化没有丢失边框,角半径和高度。

我在用 recylerView 格式化 CardView 时遇到了类似的问题。

我得到了这个简单的解决方案工作,不知道它是否是最好的解决方案,但它为我工作。

mv_cardView.getBackground().setTint(Color.BLUE)

它获得的背景可绘制的卡视图和颜色它。

你可以在 java 中使用它。

SetCardBackoundColor (Color.parseColor (“ # cac8a0”)) ;

代码颜色形式 http://www.color-hex.com/

Cardview是一个有点腼腆。我在我的结构和模型的颜色列表是喜欢

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 unResource

 cv_add_goal_choose_color.setBackgroundResource(color)

我终于把角落留下了这是 c # ,Xamarin,仿生人

视图持有人:

CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);

适配器:

vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));

你可以在下面使用

cardview.setBackgroundColor(Color.parseColor("#EAEDED"));

它在 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, id))
}

对我来说最简单的方法是这一个(科特林)

card_item.backgroundTintList = ColorStateList.valueOf(Color.parseColor("#fc4041"))

在 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

您可以在 XML 中使用它

card_view:cardBackgroundColor="@android:color/white"

或者通过程序

cardView.setCardBackgroundColor(ContextCompat.getColor(this, R.color.my_color));

如果你想改变卡色彩只是尝试这个代码,它为我工作。 对我来说,这个代码工作。我使用它与卡片和图像的意见,但我认为它在任何意见,以改变他们的色彩颜色。卡片书签是我的名字。

var cardDrawable: Drawable = binding.cardBookmark.background
cardDrawable = DrawableCompat.wrap(cardDrawable)
DrawableCompat.setTint(cardDrawable, resources.getColor(R.color.shuffleColor))
binding.cardBookmark.background = cardDrawable

你只需要设置卡片背景颜色。

yourCard.setCardBackgroundColor(Color.WHITE);

在某些情况下,它会有点棘手,因为不是所有的时间,代码 cardview.setBackgroundColor(R.color.red)将工作。

我用这种方法解决了我的问题。

final color = ColorStateList.valueOf(context.getResources().getColor(R.color.light_tab_selected));
userNoteTabCardView.setBackgroundTintList(color);
CardView cardView;


cardView.setCardBackgroundColor(getResources().getColor(R.color.colorPrimary));

一个足够的方法来改变背景颜色的 cardView 是 SetBackground 资源,你也可以创建可绘制的文件,并传递到 SetBackground 资源,

SetBackground 资源(R.draable.white _ frame)

或者

SetBackground 资源(R.color. white)

private MaterialCardView imgIgnition;
imgIgnition = findViewById(R.id.imgIgnition);
imgIgnition.setCardBackgroundColor(Color.parseColor("#198754"));

以上代码为我工作

Xml 中的“”

在片段的活动中这样做以获得值/颜色中的颜色

  cardView.setCardBackgroundColor(Color.alpha(R.color.gray999ea4));