Intereting Posts
ImageView округлые углы Можно ли получить разрешение видео на Android? OnCreateOptionsMenu внутри фрагментов Android webview и loadData, могу ли я вернуть кнопку возврата к сгенерированному контенту? Прокрутка для удаления картографирования вызывает мерцание на короткую секунду перед анимацией Определите, включен ли LTE? Пытается нарисовать текстурированные треугольники на устройстве, но эмулятор работает. Зачем? Единичное тестирование вызовов JNI Выполнение полупараллельного теста Espresso не выполняется на статических объектах? Почему мой системный оверлей ловит все штрихи (без взаимодействия с основным видом) SaveAllInBackground не работает внутри deleteAllInBackground по желанию Перенести настройки IntelliJ в Android Studio Могу ли я установить PIN-код для Bluetooth из своего приложения на Android? Какие системные изображения следует установить для Android L Developement? Автоматически масштабировать размеры шрифтов для android, используя appcelerator?

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

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