J'ai une CardView
dans ma mise en page XML et je dois lui définir des marges par programme (car je n'ai pas besoin de marge à tout moment. Sur la base de quelques conditions, je définis ou supprime la marge).
Voici comment je l'ai fait:
CardView.LayoutParams layoutParams = (CardView.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Cela a bien fonctionné. Il a mis 2dp
margin au bas de ma CardView
. Cependant, je reçois ceci dans mon logcat:
Java.lang.ClassCastException: Android.widget.LinearLayout$LayoutParams cannot be cast to Android.widget.FrameLayout$LayoutParams
J'ai donc changé CardView.LayoutParams
en FrameLayout.LayoutParams
, comme ceci:
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Et encore une fois, cela fonctionne mais je reçois la même erreur que ci-dessus.
Je l'ai donc modifié une fois de plus pour utiliser LinearLayout.LayoutParams
.
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Quand je fais cela, je ne reçois PAS l'erreur cependant il ne définit aucune marge .
Devrais-je simplement ignorer l'erreur? Cela ne semble pas juste.
MODIFIER:
Voici ma CardView
en XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:orientation="horizontal"
Android:background="@Android:color/white"
Android:minHeight="@dimen/item_min_height"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:id="@+id/cardViewAppointmentWeek"
app:cardElevation="2dp"
Android:layout_marginBottom="2dp"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:orientation="horizontal"
Android:background="?android:attr/selectableItemBackground"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
...
</LinearLayout>
</Android.support.v7.widget.CardView>
</LinearLayout>
Dans votre cas, vous êtes pas spécifiquement intéressé par le parent de votre CardView
, car la seule chose que vous souhaitez modifier est la marge. Toutes les classes *LayoutParams
sont des enfants directs/indirects de MarginLayoutParams
, ce qui signifie que vous pouvez facilement transtyper en MarginLayoutParams
et effectuer des modifications sur cet objet:
ViewGroup.MarginLayoutParams layoutParams =
(ViewGroup.MarginLayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.requestLayout();
1) Définissez les paramètres Cardview pour qu’il soit affiché par programme
Définition des paramètres de vue
CardView cardView = new CardView(context);
LinearLayout.LayoutParams cardViewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
cardView.setLayoutParams(cardViewParams)
2) Définir les paramètres d'affichage des marges autour de la vue de la carte
Paramétrage des marges Cardview
ViewGroup.MarginLayoutParams cardViewMarginParams = (ViewGroup.MarginLayoutParams) cardView.getLayoutParams();
cardViewMarginParams.setMargins(0, 30, 0, 30);
cardView.requestLayout(); //Dont forget this line
Set LayoutParams
LinearLayout linearLayout = (LinearLayout) myCardView.findViewById (R.id.linearlayoutid); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams ( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins (30, 20, 30, 0);