Je souhaite créer un espace entre les éléments de la grille. Les articles doivent tous avoir la même largeur/hauteur.Appliquer le décalage aux éléments GridLayout et conserver la même taille parmi tous les éléments
Ce que j'ai essayé:
Créer une GridLayoutOffsetDecorator
qui applique un décalage à tous les éléments de la grille:
class GridLayoutOffsetDecorator(var offset: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State?) {
super.getItemOffsets(outRect, view, parent, state)
outRect.set(offset, offset, offset, offset)
}
}
Après avoir un décalage de 8dp
crée un espace 16dp
entre les éléments. Nous avons donc encore à appliquer 8dp
de rembourrage aux bords extérieurs:
<android.support.v7.widget.RecyclerView
android:id="@+id/productList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:padding="8dp" />
Le résultat est le suivant:
Problème: les articles ne sont pas égaux en taille:
Vous remarquez une légère différence en hauteur quand vous regardez la ligne bleue. Cette différence apparaît seulement après le remplissage du recyclerview. Ce rembourrage semble légèrement redimensionner certains des éléments. Avez-vous l'expérience de ce problème? Une idée de comment cela peut être résolu? En supprimant l'image des éléments, la différence de hauteur disparaît. Voici comment l'image est définie:
<SquareImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
app:imageResource="@{product.image}" />
SquareImageView:
class SquareImageView : ImageView {
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec)
}
}
Le problème peut être causé par l'image elle-même.
D'où proviennent les différences de hauteur? Y at-il une différence dans tous vos articles, ou est-ce que l'article à l'indice 0 est plus élevé que tous les autres? – W3hri
@ W3hri la différence de hauteur est dans un ou deux éléments, mais jamais dans la totalité, la position des éléments affectés est aléatoire –
Ma première supposition était que peut-être le ImageView, qui ressemble à son ensemble à recadrer, provoque des problèmes. Cela arrive-t-il aussi sur les éléments en texte seul? – W3hri