web-dev-qa-db-fra.com

Définir la marge sur RecyclerView par programme

Je dois définir par programme la marge supérieure d'un RecyclerView, mais j'obtiens cette exception:

Java.lang.RuntimeException: Unable to resume activity Java.lang.ClassCastException: Android.view.ViewGroup$LayoutParams cannot be cast to Android.support.v7.widget.RecyclerView$LayoutParams

Voici mon code:

RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)recyclerView.getLayoutParams();
int marginTopDp = (int)getResources().getDimension(R.dimen.margin);
int marginTopPx = (int) (marginTopDp * getResources().getDisplayMetrics().density + 0.5f);
layoutParams.setMargins(0, marginTopPx, 0, 0);
recyclerView.setLayoutParams(layoutParams);

Si j'utilise le ViewGroup.LayoutParams layoutParams = recyclerView.getLayoutParams comme le suggère la trace de pile, je ne peux plus appeler setMargin car cette méthode n'existe pas pour ViewGroup.LayoutParams.

Toute aide serait appréciée.

5
Vinnie

Essayez ceci. Vous pouvez vous référer à this pour plus d’informations.

ViewGroup.MarginLayoutParams marginLayoutParams = 
      (ViewGroup.MarginLayoutParams) mRecyclerView.getLayoutParams();
marginLayoutParams.setMargins(0, 10, 0, 10);
mRecyclerView.setLayoutParams(marginLayoutParams);
15
Bharat

Vous devez utiliser un nouvel objet de MargingLayoutParams

    final FrameLayout.MarginLayoutParams marginLayoutParams = new      
                      FrameLayout.MarginLayoutParams(rvContacts.getLayoutParams());
    marginLayoutParams.leftMargin = left;
    marginLayoutParams.topMargin = top;
    marginLayoutParams.rightMargin = right;
    marginLayoutParams.bottomMargin = bottom;

    recyclerView.setLayoutParams(marginLayoutParams);
    recyclerView.requestLayout();
1
Daniil Pavenko