Le CardView a un attribut card_view:cardBackgroundColor
pour définir la couleur d'arrière-plan .
Dans le même temps, il n’existe pas de méthode permettant de modifier la couleur de manière dynamique.
J'ai juste essayé des solutions comme:
mCardView.setBackgroundColor(...);
ou en utilisant une mise en page à l'intérieur de la 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);
Ces solutions ne fonctionnent pas car la carte a un cardCornerRadius.
Ce que vous recherchez, c'est:
CardView card = ...
card.setCardBackgroundColor(color);
En XML
card_view:cardBackgroundColor="@Android:color/white"
Utilisez la propriété 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"
>
Vous pouvez l'utiliser en XML
card_view:cardBackgroundColor="@Android:color/white"
ou ceci en Java
cardView.setCardBackgroundColor(Color.WHITE);
J'ai utilisé ce code pour définir par programme:
card.setCardBackgroundColor(color);
Ou en XML, vous pouvez utiliser ce code:
card_view:cardBackgroundColor="@Android:color/white"
Un peu tard ici et partiellement hors sujet puisque ce n'est pas programmé mais je trouve qu'il est préférable de configurer les styles pour les widgets et vous pouvez le faire pour un CardView
il suffit de créer un style qui gardera votre code xml plus propre ...
<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>
ceci utilise Android.support.v7.widget.CardView
puis en définissant le style dans le fichier de mise en page:
<?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>
vous devez importer la bibliothèque appcompat-v7 à l'aide du studio Android via gradle:
dependencies {
compile 'com.Android.support:appcompat-v7:22.2.0'
}
j'espère que cela t'aides. bonne codage
La façon dont il est défini dans la méthode initialize
utilise la classe RoundRectDrawable
protected, comme suit:
RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, cardView.getRadius());
cardView.setBackgroundDrawable(backgroundDrawable);
Ce n'est pas joli, mais vous pouvez étendre cette classe. Quelque chose comme:
package Android.support.v7.widget;
public class MyRoundRectDrawable extends RoundRectDrawable {
public MyRoundRectDrawable(int backgroundColor, float radius) {
super(backgroundColor, radius);
}
}
puis:
final MyRoundRectDrawable backgroundDrawable = new MyRoundRectDrawable(bgColor,
mCardView.getRadius());
mCardView.setBackgroundDrawable(backgroundDrawable);
MODIFIER
Cela ne vous donnera pas l'ombre sur <API 21, vous devrez donc faire la même chose avec RoundRectDrawableWithShadow
.
Il ne semble pas y avoir de meilleur moyen de le faire.
J'avais un problème similaire avec le formatage de CardViews dans un recylerView.
Cette solution simple fonctionne, mais je ne suis pas sûr que ce soit la meilleure solution, mais elle a fonctionné pour moi.
mv_cardView.getBackground().setTint(Color.BLUE)
Il obtient l'arrière-plan Drawable de la carte et le teinte.
Je suis tombé sur le même problème en essayant de créer un cardview par programme. Ce qui est étrange, c'est que regarder doc https://developer.Android.com/reference/Android/support/v7/widget/CardView.html#setCardBackgroundColor % 28int% 29 , Les gars de Google ont rendu publique l’API permettant de changer la couleur d’arrière-plan d’une vue de carte, mais étrangement, je n’ai pas réussi à y accéder dans la bibliothèque de support. Voici ce qui a fonctionné pour moi:
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"/>
En faisant cela, je réussis à garder l’ombre de Cardview et des angles arrondis.
En Java
cardView.setCardBackgroundColor(0xFFFEFEFE);
Android utilise les couleurs ARGB. vous pouvez utiliser comme ceci (0xFF + RGB COLOR) - Couleur codée en dur.
Vous pouvez l'utiliser en Java.
cardView.setCardBackgroundColor (Color.parseColor ("# cac8a0"));
code couleur forme http://www.color-hex.com/
J'ai le même problème sur Xamarin.Android - VS (2017)
La Solution qui a fonctionné pour moi:
Dans votre fichier XML, ajoutez:
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
et dans votre élément Android.support.v7.widget.CardView
, ajoutez cette propriété:
card_view:cardBackgroundColor="#ffb4b4"
(c'est à dire.)
<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" />
Vous pouvez également ajouter cardElevation
et cardElevation
.
Si vous voulez éditer la cardview
par programme , vous devez simplement utiliser ce code: For (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);
Et maintenant, vous pouvez changer la couleur de fond par programmation sans perte de bordure, de rayon et d’altitude.
essayez ça marche facilement
<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
est un peu timide. J'ai eu la liste des couleurs dans ma structure et le modèle est comme
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
}
}
charge le modèle avec la couleur, dernier élément sur la construction à partir de R.color
list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))
et enfin vous pouvez définirBackgrıundResource
cv_add_goal_choose_color.setBackgroundResource(color)
J'ai enfin eu les coins pour rester. C'est c #, Xamarin.Android
dans ViewHolder:
CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);
Dans l'adaptateur:
vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));
Vous pouvez utiliser ci-dessous
cardview.setBackgroundColor(Color.parseColor("#EAEDED"));