web-dev-qa-db-fra.com

Le dernier élément de la vue de recyclage est coupé

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:

enter image description here

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

10
George

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" />
23
Pawel Laskowski

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" />
1
Yuvi