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.
Was Sie suchen, ist:
CardView card = ...
card.setCardBackgroundColor(color);
In XML
card_view:cardBackgroundColor="@Android:color/white"
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"
>
Sie können dies in XML verwenden
card_view:cardBackgroundColor="@Android:color/white"
oder dies in Java
cardView.setCardBackgroundColor(Color.WHITE);
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"
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
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.
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.
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.
In Java
cardView.setCardBackgroundColor(0xFFFEFEFE);
Android verwendet ARGB-Farben. Sie können wie folgt verwenden (0xFF + RGB COLOR) - Fest codierte Farbe.
Sie können dies in Java verwenden.
cardView.setCardBackgroundColor (Color.parseColor ("# cac8a0"));
code-Farbformular http://www.color-hex.com/
Ich habe das gleiche Problem auf Xamarin.Android - VS (2017)
Die Lösung die für mich funktioniert hat:
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.
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)
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"));
Sie können unten verwenden
cardview.setBackgroundColor(Color.parseColor("#EAEDED"));