wake-up-neo.com

Ändern Sie die Hintergrundfarbe von CardView programmgesteuert

Das CardView hat ein Attribut card_view:cardBackgroundColor zur Definition der Hintergrundfarbe . Dieses Attribut funktioniert gut.

Gleichzeitig gibt es keine Methode, um die Farbe dynamisch zu ändern.

Ich habe gerade Lösungen wie versucht:

mCardView.setBackgroundColor(...);

oder Verwenden eines Layouts in der 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);

Diese Lösungen funktionieren nicht, da die Karte über einen cardCornerRadius verfügt.

98

Was Sie suchen, ist:

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

In XML 

 card_view:cardBackgroundColor="@Android:color/white"
222
Simon Heinen

Verwenden Sie die Eigenschaft 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"
    >
117
user790999

Sie können dies in XML verwenden

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

oder dies in Java

cardView.setCardBackgroundColor(Color.WHITE);
21
eluleci

Ich habe diesen Code verwendet, um programmgesteuert festzulegen:

card.setCardBackgroundColor(color);

Oder in XML können Sie diesen Code verwenden:

card_view:cardBackgroundColor="@Android:color/white"
17
m.v.n.kalyani

Ein wenig spät hier und teilweise aus Thema, da dies nicht programmgesteuert ist, aber ich finde es am besten, Stile für Widgets einzurichten, und Sie können dies für eine CardView tun.

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

dies verwendet Android.support.v7.widget.CardView 

und dann den Stil in der Layoutdatei einstellen:

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

sie müssen die appcompat-v7-Bibliothek mit Android Studio über gradle importieren:

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

hoffe das hilft. glückliche Kodierung

9
kandroidj

Die Art, wie sie in der initialize-Methode festgelegt wird, verwendet die geschützte RoundRectDrawable-Klasse wie folgt:

RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, cardView.getRadius());
cardView.setBackgroundDrawable(backgroundDrawable);

Es ist nicht hübsch, aber Sie können diese Klasse erweitern. So etwas wie:

package Android.support.v7.widget;

public class MyRoundRectDrawable extends RoundRectDrawable {

    public MyRoundRectDrawable(int backgroundColor, float radius) {
        super(backgroundColor, radius);
    }

}

dann:

final MyRoundRectDrawable backgroundDrawable = new MyRoundRectDrawable(bgColor,
            mCardView.getRadius());
mCardView.setBackgroundDrawable(backgroundDrawable);

EDIT

Dies gibt Ihnen keinen Schatten auf <API 21, daher müssen Sie dasselbe mit RoundRectDrawableWithShadow tun. 

Es scheint keinen besseren Weg zu geben.

8
Paul Burke

Ich hatte ein ähnliches Problem mit der Formatierung von CardViews in einer RecylerView.

Ich habe diese einfache Lösung zum Laufen gebracht, nicht sicher, ob es die beste Lösung ist, aber es hat für mich funktioniert.

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

Es erhält den Hintergrund Drawable des cardView und färbt es ein.

3
Steve

Ich bin auf das gleiche Problem gestoßen, als ich versuche, einen Cardview programmgesteuert zu erstellen. Was merkwürdig ist, ist der Blick auf doc https://developer.Android.com/reference/Android/support/v7/widget/CardView.html#setCardBackgroundColor % 28int% 29 , Google-Jungs haben das API veröffentlicht, um die Hintergrundfarbe einer Kartenansicht zu ändern, aber seltsamerweise gelang es mir nicht, in der Support-Bibliothek darauf zuzugreifen. Daher funktionierte hier Folgendes:

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

Dadurch gelingt es mir, den Cardview-Schatten und die abgerundeten Ecken zu erhalten.

2
Martial Konvi

In Java

cardView.setCardBackgroundColor(0xFFFEFEFE);

Android verwendet ARGB-Farben. Sie können wie folgt verwenden (0xFF + RGB COLOR) - Fest codierte Farbe. 

2
yakup_y

Sie können dies in Java verwenden.

cardView.setCardBackgroundColor (Color.parseColor ("# cac8a0"));

code-Farbformular http://www.color-hex.com/

1
Muthu Krishnan

Ich habe das gleiche Problem auf Xamarin.Android - VS (2017)

Die Lösung die für mich funktioniert hat:

LÖSUNG

Fügen Sie in Ihrer XML-Datei Folgendes hinzu:

 xmlns:card_view="http://schemas.Android.com/apk/res-auto"

und fügen Sie in Ihrem Android.support.v7.widget.CardView-Element diese Eigenschaft hinzu:

card_view:cardBackgroundColor="#ffb4b4"

(d.h.)

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

Sie können auch cardElevation und cardElevation hinzufügen.

Wenn Sie die cardview programmgesteuert bearbeiten möchten, müssen Sie nur diesen Code verwenden: Für (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);

Und jetzt können Sie die Hintergrundfarbe programmgesteuert ändern, ohne Rand, Eckenradius und Höhe zu verlieren.

0
Fabio

versuchen Sie es funktioniert einfach

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

Cardview ist etwas schüchtern. Ich hatte eine Liste von Farben in meiner Struktur und Model ist wie

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
}

}

laden Sie das Modell mit Farbe, das letzte Element der Konstruktion, das von R.color übernommen wird.

 list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))

und abschließend können Sie setBackgrıundResource einstellen

 cv_add_goal_choose_color.setBackgroundResource(color)
0
Sam

Ich bekam endlich die Ecken zu bleiben. Das ist c #, Xamarin.Android

in ViewHolder:

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

Im Adapter:

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

Sie können unten verwenden

cardview.setBackgroundColor(Color.parseColor("#EAEDED"));
0
Aditya Patil