Ответ 1
То, что вы ищете, это:
CardView card = ...
card.setCardBackgroundColor(color);
В XML
card_view:cardBackgroundColor="@android:color/white"
Обновление: в XML
app:cardBackgroundColor="@android:color/white"
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"
Обновление: в XML
app: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
.
Кажется, что нет лучшего способа сделать это.
Немного поздно здесь и частично от темы, потому что это не программно, но я считаю, что лучше всего устанавливать стили для Widgets, и вы можете сделать это для 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'
}
надеюсь, что это поможет. счастливое кодирование
В JAVA
cardView.setCardBackgroundColor(0xFFFEFEFE);
android использует цвета ARGB. вы можете использовать это (0xFF + RGB COLOR) - Жестко-кодированный цвет.
У меня была аналогичная проблема с форматированием CardViews в recylerView.
Я получил это простое решение, не уверен, что это лучшее решение, но оно сработало для меня.
mv_cardView.getBackground().setTint(Color.BLUE)
Он получает фон Drawable of 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 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"/>
Для этого мне удастся сохранить тень карты и закругленные углы.
У меня такая же проблема на 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" />
Вы также можете добавить 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);
И теперь вы можете менять цвет фона программно без потери границы, углового радиуса и высоты.
Вы можете использовать это в Java.
cardView.setCardBackgroundColor(Color.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-версии вопроса. haha Cheers!
Cardview
немного скромный. У меня был список цветов в моей структуре, и модель похожа
class ModelColor : Serializable {
var id: Int? = 0
var title: String? = ""
var color: Int? = 0// HERE IS THE COLOR FIELD WE WILL USE
constructor(id: Int?, title: String?, color: Int?) {
this.id = id
this.title = title
this.color = color
}
}
загрузить модель с цветом, последний элемент конструкции, R.color
из R.color
list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))
и, наконец, вы можете установить BackgrıundResource
cv_add_goal_choose_color.setBackgroundResource(color)
Я наконец получил углы, чтобы остаться. Это С#, Xamarin. Android
в ViewHolder:
CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);
В адаптере:
vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));
Вы можете использовать ниже
cardview.setBackgroundColor(Color.parseColor("#EAEDED"));
Это очень просто в котлине. Используйте ColorStateList для изменения цвета вида карты
var color = R.color.green;
cardView.setCardBackgroundColor(context.colorList(color));
Расширение kotlin для ColorStateList:
fun Context.colorList(id: Int): ColorStateList {
return ColorStateList.valueOf(ContextCompat.getColor(this, color))
}
попробуйте это работает легко
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
card_view:cardBackgroundColor="#fff"
card_view:cardCornerRadius="9dp"
card_view:cardElevation="4dp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="10dp"
android:paddingBottom="10dp">