Изменение цвета фона 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); 

Эти решения не работают, потому что у карты есть cardCornerRadius.

Solutions Collecting From Web of "Изменение цвета фона CardView программно"

Что вы ищете:

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

В XML

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

Используйте свойство 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" > 

Вы можете использовать это в XML

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

Или это в Java

 cardView.setCardBackgroundColor(Color.WHITE); 

Я использовал этот код для программного программирования:

 card.setCardBackgroundColor(color); 

Или в XML вы можете использовать этот код:

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

Способ, который он задает в методе 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 просто создал стиль, который сохранит ваш 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> 

Вам нужно импортировать библиотеку appcompat-v7 с помощью студии Android через gradle:

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

надеюсь это поможет. Счастливое кодирование

Я столкнулся с той же проблемой при попытке создать картотеку программно, что странно, так это то, что глядя на документ https://developer.android.com/reference/android/support/v7/widget/CardView.html#setCardBackgroundColor%28int % 29 , ребята Google обнародовали api, чтобы изменить цвет фона в виде карты, но странно, что мне не удалось получить доступ к нему в библиотеке поддержки, поэтому вот что сработало для меня:

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

Делая это, мне удается сохранить тень карты и закругленные углы.

В JAVA

 cardView.setCardBackgroundColor(0xFFFEFEFE); 

Андроид использует цвета ARGB. Вы можете использовать это (0xFF + RGB COLOR) – Жестко-кодированный цвет.

Для тех, кто задается вопросом, откуда появилось это имя «card_view». Это фактически пространство имен, и таким образом вы можете его создать …

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

Здесь вторая строка (начиная с начала) создает пространство имен .. и последняя строка из последней – это xml-версия ответа этой java-версии вопроса. Haha Cheers!

Попробуйте, это работает легко

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

У меня такая же проблема на Xamarin.Android – 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" /> 1 <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" /> 

Вы также можете добавить cardElevation и cardElevation .

Если вы хотите отредактировать 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); 

И теперь вы можете менять цвет фона программно, не теряя границы, угловой радиус и высоту.