studio - como implementar cardview en android
Cambiar el color de fondo de CardView mediante programación (16)
CardView
tiene el atributo
card_view:cardBackgroundColor
para definir el color de fondo.
Este atributo funciona bien.
Al mismo tiempo, no hay un método para cambiar el color dinámicamente.
Acabo de probar soluciones como:
mCardView.setBackgroundColor(...);
o usando un diseño dentro de la tarjeta
<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);
Estas soluciones no funcionan porque la tarjeta tiene cardCornerRadius.
prueba que funciona fácil
<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">
En java
cardView.setCardBackgroundColor(0xFFFEFEFE);
Android usa colores ARGB. puede usar así (0xFF + COLOR RGB) - Color codificado.
Estaba teniendo un problema similar al formatear CardViews en un recylerView.
Obtuve esta solución simple, no estoy seguro de si es la mejor solución, pero funcionó para mí.
mv_cardView.getBackground().setTint(Color.BLUE)
Obtiene el fondo Dibujable de cardView y lo tiñe.
Finalmente conseguí las esquinas para quedarme. Este es C #, Xamarin.Android
en ViewHolder:
CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);
En adaptador:
vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));
La forma en que se establece en el método
initialize
usa la clase protegida
RoundRectDrawable
, de esta manera:
RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, cardView.getRadius());
cardView.setBackgroundDrawable(backgroundDrawable);
No es bonito, pero puedes extender esa clase. Algo como:
package android.support.v7.widget;
public class MyRoundRectDrawable extends RoundRectDrawable {
public MyRoundRectDrawable(int backgroundColor, float radius) {
super(backgroundColor, radius);
}
}
entonces:
final MyRoundRectDrawable backgroundDrawable = new MyRoundRectDrawable(bgColor,
mCardView.getRadius());
mCardView.setBackgroundDrawable(backgroundDrawable);
EDITAR
Esto no le dará la sombra en <API 21, por lo que tendría que hacer lo mismo con
RoundRectDrawableWithShadow
.
No parece haber una mejor manera de hacer esto.
Lo que estás buscando es:
CardView card = ...
card.setCardBackgroundColor(color);
En XML
card_view:cardBackgroundColor="@android:color/white"
Actualización: en XML
app:cardBackgroundColor="@android:color/white"
Me encontré con el mismo problema al intentar crear una vista de tarjeta mediante programación, lo que es extraño es que al mirar el documento https://developer.android.com/reference/android/support/v7/widget/CardView.html#setCardBackgroundColor%28int%29 , los chicos de Google hicieron pública la API para cambiar el color de fondo de una vista de tarjeta, pero extrañamente no tuve acceso a ella en la biblioteca de soporte, así que esto es lo que funcionó para mí:
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"/>
Al hacerlo, logro mantener la sombra de la vista de tarjeta y las esquinas redondeadas.
Puedes usar a continuación
cardview.setBackgroundColor(Color.parseColor("#EAEDED"));
Puedes usar esto en Java.
cardView.setCardBackgroundColor (Color.parseColor ("# cac8a0"));
código color formulario http://www.color-hex.com/
Puedes usar esto en XML
card_view:cardBackgroundColor="@android:color/white"
o esto en Java
cardView.setCardBackgroundColor(Color.WHITE);
Tengo el mismo problema en Xamarin.Android - VS (2017)
La solución que funcionó para mí:
SOLUCIÓN
En su archivo XML agregue:
xmlns:card_view="http://schemas.android.com/apk/res-auto"
y en su elemento
android.support.v7.widget.CardView
agregue esta propiedad:
card_view:cardBackgroundColor="#ffb4b4"
(es decir)
<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" />
También puede agregar
cardElevation
y
cardElevation
.
Si desea editar la vista de
cardview
programación
, solo necesita usar este código: Para (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);
Y ahora puede cambiar el color de fondo mediante programación sin pérdida de borde, radio de esquina y elevación.
Un poco tarde aquí y parcialmente fuera de tema ya que esto no es programáticamente, pero creo que es mejor configurar estilos para Widgets y puedes hacer esto para un
CardView
solo crea un estilo que mantendrá tu xml más limpio ...
<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>
esto está usando
android.support.v7.widget.CardView
y luego configurando el estilo en el archivo de diseño:
<?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>
necesita importar la biblioteca appcompat-v7 usando Android studio a través de gradle:
dependencies {
compile ''com.android.support:appcompat-v7:22.2.0''
}
espero que esto ayude. codificación feliz
Usé este código para configurar mediante programación:
card.setCardBackgroundColor(color);
O en XML puedes usar este código:
card_view:cardBackgroundColor="@android:color/white"
Utilice la propiedad 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"
>
Cardview
es un poco tímido.
Tenía una lista de colores en mi estructura y el modelo es como
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
}
}
Cargue el modelo con color, el último elemento en la estructura tomando de
R.color
list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))
y finalmente puedes establecerBackgrıundResource
cv_add_goal_choose_color.setBackgroundResource(color)
Es muy simple en kotlin. Use ColorStateList para cambiar el color de la vista de la tarjeta
var color = R.color.green;
cardView.setCardBackgroundColor(context.colorList(color));
Una extensión de Kotlin de ColorStateList:
fun Context.colorList(id: Int): ColorStateList {
return ColorStateList.valueOf(ContextCompat.getColor(this, color))
}