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.
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);
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();