Ich möchte ein Leerzeichen zwischen Elementen im Raster erstellen. Die Gegenstände sollten alle die gleiche Breite/Höhe haben.Offset auf GridLayout-Elemente anwenden und gleiche Größe unter allen Elementen beibehalten
Was ich habe versucht:
eine GridLayoutOffsetDecorator
erstellen, die für alle Rasterelemente ein Offset gilt:
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)
}
}
mit einem Versatz von 8dp
erzeugt einen 16dp
Raum zwischen den Elementen. So haben wir noch 8dp
der Polsterung an den äußeren Kanten anzuwenden:
<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" />
Das Ergebnis ist:
Problem: die Einzelteile sind nicht gleich groß:
Sie bemerken einen kleinen Unterschied in der Höhe, wenn Sie auf die blaue Linie schauen. Dieser Unterschied wird erst nach dem Füllen der Recycler-Ansicht angezeigt. Diese Polsterung scheint einige der Elemente leicht zu verändern. Habt ihr irgendwelche Erfahrungen mit diesem Problem? Irgendeine Idee, wie das gelöst werden kann?
Durch Entfernen des Bildes von den Elementen verschwindet der Höhenunterschied. Dies ist, wie das Bild gesetzt:
<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)
}
}
So das Problem durch das Bild, verursacht werden kann, selbst.
Wo treten die Höhenunterschiede auf? Gibt es einen Unterschied in all deinen Items, oder ist nur der Item bei Index 0 höher als alle anderen Items? – W3hri
@ W3hri die Höhendifferenz in einem oder zwei Punkten, aber nie in der Position der betroffenen Produkte ist zufällig –
Meine erste Vermutung war, dass vielleicht die Image, die Mitte-Ernte wie sein Satz aussieht, einige Probleme verursacht. Tritt es auch bei Nur-Text-Elementen auf? – W3hri