J'utilise recyclerview pour afficher une liste d'éléments et la disposition des contraintes est la vue parent. La disposition est affichée ci-dessous:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:orientation="vertical"
Android:layout_height="match_parent">
<!-- Load the toolbar here -->
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:fitsSystemWindows="true"
Android:minHeight="?android:attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Android:background="@color/colorPrimary"/>
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="8dp"
Android:visibility="visible"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
<ImageView
Android:id="@+id/imageViewContent"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="parent"
Android:visibility="gone"
Android:src="@drawable/empty_category"/>
<TextView
Android:id="@+id/textViewContent"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="16dp"
Android:gravity="center"
Android:text="Empty Category"
Android:textStyle="bold"
Android:textColor="@color/colorPrimary"
Android:textAppearance="@style/TextAppearance.AppCompat.Large"
Android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageViewContent" />
</Android.support.constraint.ConstraintLayout>
The adapter layout for each row is presented below:
<?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:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<FrameLayout
Android:id="@+id/framelayoutImage"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_above="@id/buttonCart"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp">
<ImageView
Android:id="@+id/imageViewCoverArt"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:scaleType="center" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom"
Android:background="#59000000"
Android:orientation="vertical">
<TextView
Android:id="@+id/textViewPrice"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|left"
Android:layout_marginLeft="10dp"
Android:clickable="false"
Android:text="$220"
Android:textAppearance="@style/TextAppearance.AppCompat.Medium"
Android:textColor="@Android:color/white"
Android:textStyle="bold" />
<TextView
Android:id="@+id/textViewDetails"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|left"
Android:layout_marginLeft="10dp"
Android:layout_marginTop="8dp"
Android:ellipsize="end"
Android:maxLength="17"
Android:maxLines="1"
Android:text="Lorem ipsum dolor sit amet, consecte"
Android:textAppearance="@style/TextAppearance.AppCompat.Medium"
Android:textColor="@Android:color/white" />
</LinearLayout>
</FrameLayout>
<Button
Android:id="@+id/buttonCart"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="8dp"
Android:background="@drawable/buttonshape"
Android:text="Add to Cart"
Android:textAppearance="@style/TextAppearance.AppCompat.Small"
Android:textColor="@Android:color/white"
Android:textStyle="bold"
/>
</LinearLayout>
Après avoir exécuté mon application, les dispositions sont présentées dans l'image ci-dessous:
J'ai essayé d'ajouter une marge inférieure à la vue de recyclage, mais cela n'a pas résolu le problème. J'ai utilisé les liens suivants comme références: RecyclerView coupe le dernier élément , RecyclerView coupe le dernier élément et j'ai essayé de faire ces changements sans succès
Votre RecyclerView
n'est pas correctement contraint. Vous pouvez soit utiliser 0dp
(MATCH_CONSTRAINT
) pour la hauteur et utiliser tout l'espace disponible:
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_marginTop="8dp"
Android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
ou si vous souhaitez le conserver sous la forme wrap_content
vous devrez définir app:layout_constrainedHeight="true"
attribut pour appliquer les contraintes:
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginTop="8dp"
Android:visibility="visible"
app:layout_constrainedHeight="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
J'ai essayé toutes les options disponibles sur la plupart des sites possibles, mais je n'ai pas obtenu la solution. Ensuite, je pense que je peux utiliser le rembourrage inférieur? Et oui, ça marche pour moi.
Je vous partage le code. Rien de plus d'attribut requis autre que la hauteur, la largeur et le rembourrage.
<Android.support.v7.widget.RecyclerView
Android:id="@+id/your id name"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:paddingBottom="?attr/actionBarSize"
app:layout_constraintTop_toBottomOf="@+id/your field" />