Intereting Posts
Линейная диаграмма AchartEngine Xaxis Android System.loadLibrary (…) не смог найти родную библиотеку в моем случае Как я могу использовать логические операции в привязке данных к андроиду? Один файл .apk, который устанавливает два приложения Как добавить функцию на кнопку в телефонной запитке? Android Mocking Dagger2 вводит зависимость для теста Espresso Xamarin Android Finalizer не получает вызов, когда вы покидаете активность, чтобы перейти на другую активность Удаленная отладка Android не работает в Windows 7 Как заставить IntentService немедленно остановить кнопку отмены из Activity? Отключить ориентацию, но определить ориентацию Какую платформу MBaaS использовать для конкретного проекта: Parse или Google Cloud Изменение цвета фона popupmenu при использовании библиотеки поддержки Ошибка Java на сервере WebSocket Настройка настраиваемого шрифта для всех TextViews Обратная совместимость материалов

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

Что вы ищете:

 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); 

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