Ändern Sie die Hintergrundfarbe von CardView programmgesteuert

Das CardView hat ein Attribut card_view:cardBackgroundColor , um die Hintergrundfarbe zu definieren. Dieses Attribut funktioniert gut.

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

  • Lokalisierung Android
  • ANTI_ALIAS_FLAG für ImageView im Layout?
  • Wie kann ich Funkknöpfe rechts neben dem zugehörigen Text ausrichten?
  • RecyclerView mit verschiedenen Cardlayouts
  • Stoppen einer Android App aus der Konsole
  • Android Bluetooth Pairing
  • Ich habe gerade Lösungen wie:

     mCardView.setBackgroundColor(...); 

    Oder mit einem Layout im 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, weil die Karte einen cardCornerRadius hat.

  • Android-Grafiken riesigen Haufen Speicherverbrauch? - LibGDX
  • Android ==> ListView bleiben ausgewählt?
  • Gibt es eine gute Online-IDE für Android-Entwicklung?
  • Android Studio - entfernen Sicherheit Warnung Warnung
  • ClassCastException android.widget.FrameLayout $ LayoutParams zu android.support.v4.widget.DrawerLayout $ LayoutParams
  • Warum explizite Typ Argument sollte durch Diamant ersetzt werden?
  • 11 Solutions collect form web for “Ändern Sie die Hintergrundfarbe von CardView programmgesteuert”

    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 diese in XML verwenden

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

    Oder dies in Java

     cardView.setCardBackgroundColor(Color.WHITE); 

    Ich habe diesen Code programmgesteuert eingestellt:

     card.setCardBackgroundColor(color); 

    Oder in XML kannst du diesen Code benutzen:

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

    Die Art, wie es in der initialize , verwendet die geschützte RoundRectDrawable Klasse, wie RoundRectDrawable :

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

    Es ist nicht schön, aber du kannst diese Klasse erweitern. 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); 

    BEARBEITEN

    Dies wird dir nicht den Schatten auf <API 21 geben, also musst du das gleiche mit RoundRectDrawableWithShadow .

    Es scheint nicht, ein besserer Weg zu sein, dies zu tun.

    Ein bisschen spät hier & teilweise aus Thema, da dies nicht programmgesteuert ist, aber ich finde es am besten, um Stile für Widgets CardView und du kannst das für eine CardView einfach einen Stil erstellen, den es dein xml sauberer halten wird …

     <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 ist mit android.support.v7.widget.CardView

    Und dann den Stil in der Layout-Datei:

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

    Ich kam auf die gleiche Frage beim Versuch, eine Kartenansicht programmgesteuert zu erstellen, was ist seltsam ist, dass das Betrachten der doc https://developer.android.com/reference/android/support/v7/widget/CardView.html#setCardBackgroundColor%28int % 29 , Google Jungs veröffentlichten die api, um die Hintergrundfarbe einer Kartenansicht zu ändern, aber seltsam war es mir nicht gelungen, Zugang zu ihr in der Unterstützungsbibliothek zu haben, also hier ist, was für mich gearbeitet hat:

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

    Das gelingt mir, den Kartenschatten und die abgerundeten Ecken zu halten.

    In JAVA

     cardView.setCardBackgroundColor(0xFFFEFEFE); 

    Android verwenden ARGB Farben. Du kannst so verwenden (0xFF + RGB FARBE) – hartcodierte Farbe.

    Für diejenigen, die sich fragen, woher dieser "card_view" Name kam …. Es ist eigentlich ein Namespace und auf diese Weise können Sie es schaffen …

     <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="230dp" card_view:cardCornerRadius="2dp" card_view:cardElevation="2dp" card_view:cardPreventCornerOverlap="false" card_view:cardBackgroundColor="@color/cardview_1_background" card_view:contentPadding="0dp"> 

    Hier die zweite Zeile (von Anfang) ist die Schaffung der Namespace .. und letzte Zeile von letzter ist die xml-Version der Antwort der Java-Version der Frage. Haha Beifall!

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

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

    Die Lösung , die für mich gearbeitet hat:

    LÖSUNG

    In deiner XML-Datei füge hinzu:

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

    Und in Ihrem android.support.v7.widget.CardView Element fügen Sie diese Angemessenheit hinzu:

     card_view:cardBackgroundColor="#ffb4b4" 

    (Dh)

     <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 du die cardview programmgesteuert bearbeiten cardview , musst du nur diesen Code benutzen: 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 Hintergrundfarbe programmgesteuert ändern, ohne verlorene Grenze, Eckenradius und Elevation.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.