RecyclerView schneidet den letzten Artikel ab

Lesezeit: 7 Minuten

Benutzer-Avatar
Sotiris Falieris

Ich habe ein Fragment mit einer Symbolleiste und einer recyclerView darin.

Ich fülle die recyclerView mit Dummy-Daten und versuche dann, sie anzuzeigen. Aus irgendeinem Grund wird das letzte Element von recyclerView abgeschnitten.

Dies ist das XML des Fragments:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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:background="@color/background_1"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_of_app_bar"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="@color/primary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="https://stackoverflow.com/questions/32742724/@drawable/placeholder_rect_header"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/simpleList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

Die Punkte auf der Liste sind wirklich einfach:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="@color/background_1"
    android:orientation="horizontal"
    android:padding="@dimen/space_for_a_bit_of_air">

    <ImageView
        android:id="@+id/album_cover"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_vertical"
        android:scaleType="fitXY"
        android:src="https://stackoverflow.com/questions/32742724/@drawable/placeholder_album_cover"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="@dimen/space_for_distinguishing_stuff"
        android:orientation="vertical">

        <TextView
            android:id="@+id/album_title"
            style="@style/titleText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sample_text_c"/>

        <TextView
            android:id="@+id/album_year"
            style="@style/subtitleText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sample_text_a"/>

    </LinearLayout>

</LinearLayout>

Ich bin jetzt am Ende der Liste, aber das letzte Element sieht immer noch abgeschnitten aus

Ich bin jetzt am Ende der Liste, aber das letzte Element sieht immer noch abgeschnitten aus.

Ich verwende die neueste Version vom 23.09.2015 der Google-Bibliotheken, 23.0.1, (dh com.android.support:recyclerview-v7:23.0.1) und die folgende Konfiguration bei build.gradle:

compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
   minSdkVersion 14
   targetSdkVersion 23
   versionCode 1
   versionName "1.0"

   multiDexEnabled true// Enabling multidex support
 }

Jede Hilfe wäre sehr dankbar, da ich mit diesem Problem verrückt werde 🙁

LÖSUNG

Ok, nachdem ich den Code auf das Nötigste gesäubert und die Komplexität entfernt hatte, fand ich das Problem: Es war eine Kombination aus falschen Flags und fehlenden oder zusätzlichen Attributen. Folgendes funktioniert sowohl für Android 4.x als auch für 5.x einwandfrei:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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:layout_height="match_parent"
    android:background="@color/background_1"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_of_app_bar"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:collapsedTitleTextAppearance="@style/Title.collapsed"
            app:contentScrim="@color/primary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleTextAppearance="@style/Title.Expanded"
            app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="https://stackoverflow.com/questions/32742724/@drawable/artistic_4"
                app:layout_collapseMode="parallax"/>

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/height_of_app_bar"
                android:background="@drawable/gradient"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/simpleList"
        style="@style/genericRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:listitem="@layout/item_discography_album"/>

</android.support.design.widget.CoordinatorLayout>

Kurz gesagt, android:fitsSystemWindows=”true” sollte nur bei coordinatorLayout, AppBarLayout und theCollapsingToolbarLayout (die wir basierend auf dem Bildschirm auf Android 5.x anpassen möchten) stehen, die app:layout_scrollFlags sollten gesetzt sein auf “scroll|enterAlways|enterAlwaysCollapsed” und die Symbolleiste sollte als Höhe die Höhe der actionBar haben. Schließlich ist es besser, die RecyclerView so sauber wie möglich zu halten, damit Sie den Layoutabstand bei jedem Zeilenelement steuern können.

  • Meins ist ein einfaches Constraint-Layout mit nur einer Symbolleiste und einer Recycleransicht. Ihre Lösung passt möglicherweise nicht in meinen Fall. Aber die @Rami-Lösung klingt für das gemeldete Problem generisch, da die Höhe des Appbar-Layouts als unterer Rand angepasst werden musste, um das Problem zu beheben.

    – PravyNandas

    12. Oktober 2018 um 10:56 Uhr

Ich habe alle verfügbaren Optionen von den meisten möglichen Websites ausprobiert, aber ich habe keine Lösung erhalten. Dann denke ich, kann ich eine Bodenpolsterung verwenden? Und ja, es ist Arbeit für mich.

Ich teile den Code mit Ihnen. Außer Höhe, Breite und Polsterung sind keine weiteren Attribute erforderlich.

android:paddingBottom=”?attr/actionBarSize”

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

Das hat bei mir funktioniert. Setzen Sie sowohl die Höhe als auch die Breite von recyclerView auf 0dp

 <android.support.v7.widget.RecyclerView
    android:id="@+id/rv_materias"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginTop="20dp"
    android:background="@color/secondaryLightColor"
    app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/guideline6"></android.support.v7.widget.RecyclerView>

  • Sind Sie sicher, dass 0dp für Breite und Höhe das Problem beheben wird? Es hat auf meiner Seite nicht funktioniert. Sharfe deine Antwort

    – Ahmad Arslan

    29. Juni 2018 um 10:39 Uhr

  • Verwenden Sie ConstraintLayout?

    – Sila Siebert

    5. Juli 2018 um 9:45 Uhr

  • Ich verwende das Constraint-Layout und setze Höhe und Breite auf 0dp, aber es funktioniert nicht. Ich denke, Sie haben den Recycler in ein anderes Layout eingeschlossen und dort die Höhe und Breite eingestellt? Können Sie bitte die vollständige Antwort teilen?

    – PravyNandas

    23. Oktober 2018 um 16:57 Uhr

  • das war mein problem 0dp

    – Naveed Ahmad

    12. März 2019 um 19:34 Uhr

Benutzer-Avatar
Harisch Godara

Sie können Folgendes versuchen, da dies wie erwartet funktioniert:

<android.support.v7.widget.RecyclerView
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/layout_header">
</android.support.v7.widget.RecyclerView>

  • Sind Sie sicher, dass 0dp für Breite und Höhe das Problem beheben wird? Es hat auf meiner Seite nicht funktioniert. Sharfe deine Antwort

    – Ahmad Arslan

    29. Juni 2018 um 10:39 Uhr

  • Verwenden Sie ConstraintLayout?

    – Sila Siebert

    5. Juli 2018 um 9:45 Uhr

  • Ich verwende das Constraint-Layout und setze Höhe und Breite auf 0dp, aber es funktioniert nicht. Ich denke, Sie haben den Recycler in ein anderes Layout eingeschlossen und dort die Höhe und Breite eingestellt? Können Sie bitte die vollständige Antwort teilen?

    – PravyNandas

    23. Oktober 2018 um 16:57 Uhr

  • das war mein problem 0dp

    – Naveed Ahmad

    12. März 2019 um 19:34 Uhr

Benutzer-Avatar
jyotisch

Verwenden Sie RelativeLayout als übergeordnetes Element von RecycerView. Es funktioniert für mich.

  • Ja, es funktionierte für mein Szenario, in dem ich Daten im Raster mit verschachtelten Recyler-Ansichten füllte und mit der LL als übergeordneter Ansicht meine letzte Ansicht ausgeschnitten und innerhalb ihrer Grenzen scrollbar machte, anstatt LL scrollbar zu machen. RL als übergeordnetes Element zu haben, hat den Trick getan und das gesamte Layout ist jetzt scrollbar, wie ich es wollte.

    – VipiN Negi

    3. Mai 2019 um 8:06 Uhr

1018420cookie-checkRecyclerView schneidet den letzten Artikel ab

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy