Измените цвет фона CardView программно
The 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.
13 ответов:
то, что вы ищете это:
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"
немного поздно здесь и частично вне темы, так как это не программно, но я считаю, что лучше всего настроить стили для виджетов, и вы можете сделать это для
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 studio через gradle:
dependencies { compile 'com.android.support:appcompat-v7:22.2.0' }
надеюсь, что это помогает. счастливый кодирование
то, как он установлен в
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);
EDIT
это не даст вам тень на RoundRectDrawableWithShadow.
кажется, нет лучшего способа сделать это.
я столкнулся с той же проблемой при попытке создать cardview программно, что странно, что глядя на документ 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"/>
делая это, мне удается сохранить тень cardview и закругленные углы.
In JAVA
cardView.setCardBackgroundColor(0xFFFEFEFE);
android использует цвета ARGB. вы можете использовать вот так (цвет 0xFF + RGB)--жестко закодированный цвет.
У меня была аналогичная проблема с форматированием CardViews в recylerView.
Я получил это простое решение работает, не уверен, что это лучшее решение, но это сработало для меня.
mv_cardView.getBackground().setTint(Color.BLUE)
он получает фон Drawable cardView и оттеняет его.
вы можете использовать это в Java.
cardView.setCardBackgroundColor (цвет.parseColor("#cac8a0"));
форма цвета кода http://www.color-hex.com/
для тех, кто задается вопросом, откуда взялось это имя "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. хаха Ура !
попробуйте, это работает легко
<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.Андроид - против (2017)
The решение это сработало для меня:
решение
в 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" />
вы также можете добавить
cardElevation
иcardElevation
.если вы хотите отредактировать
cardview
программно вы просто нужно использовать этот код: (С#)cvBianca = FindViewById<Android.Support.V7.Widget.CardView>(Resource.Id.cv_bianca); cvBianca.Elevation = 14; cvBianca.Radius = 14; cvBianca.PreventCornerOverlap = true; cvBianca.SetCardBackgroundColor(Color.Red);
и теперь вы можете изменить цвет фона программно без потерянных границы, радиуса угла и высоты.