webentwicklung-frage-antwort-db.com.de

RecyclerView schneidet das letzte Element ab

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 der RecyclerView abgeschnitten.

Dies ist die 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="@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 Elemente in der Liste sind sehr 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="@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>

 I am now at the end of the list, but the last element still looks cut-off

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

Ich verwende die neueste Version der Google-Bibliotheken 23.0.1 (d. H. Com.Android.support:recyclerview-v7:23.0.1) (Stand: 23.09.2015) und die folgende Konfiguration im 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 gereinigt und die Komplexität entfernt hatte, fand ich das Problem: Es war eine Kombination aus falschen Flags und fehlenden oder zusätzlichen Attributen. Das folgende funktioniert gut für Android 4.x und 5.x:

<?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="@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>

Kurzum: Android: fitsSystemWindows = "true" sollte nur am CoordinatorLayout, AppBarLayout und theCollapsingToolbarLayout (die wir auf Basis des Bildschirms unter Android 5.x anpassen möchten) gesetzt sein zu "scrollen | enterAlways | enterAlwaysCollapsed" und die Symbolleiste sollte als Höhe die Höhe der Aktionsleiste haben. Schließlich ist es besser, RecyclerView so sauber wie möglich zu halten, damit Sie den Layoutabstand für jede Werbebuchung festlegen können.

23

Ändern Sie die RecyclerView-Höhe in "wrap_content" und fügen Sie die AppBarLayout-Höhe als unteren Rand hinzu.

<Android.support.v7.widget.RecyclerView
        Android:id="@+id/simpleList"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="@dimen/height_of_app_bar"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

Der abgeschnittene Teil des Listenelements ist die Höhe von AppBarLayout.

16
Rami

Dies hat für mich funktioniert. Setzen Sie Höhe und Breite des RecyclerView auf 0 dB

 <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>
3
Sila Siebert

Ich hatte das gleiche Problem (es fehlte sogar ein ganzes ViewHolder-Element aus meiner Liste), als ich eine RecyclerView in einem ConstraintLayout verwendete. Wie Sila Siebert erwähnt wurde, gelang es, layout_width und layout_height der RecyclerView auf Null zu setzen. Es ist etwas verwirrend, weil der Editor nach einiger Zeit zurückspringt und "match_constraints" sagt, während der XML-Text 0dp sagt. Lassen Sie sich nicht verwirren, es sollte funktionieren.

1
Pauliman

Ich habe ein Dialogfragment, das die RecyclerView enthält. Bei meinem anfänglichen Layout für die allgemeine Einschränkung funktionierte keine der oben genannten Lösungen. Daher habe ich sie in ein lineares Layout geändert, das problemlos funktioniert. Dieses Layout enthält eine Symbolleiste und die Recyclingübersicht. 

1
Greg Holst

Ich habe alle verfügbaren Optionen auf den meisten möglichen Websites ausprobiert, aber die Lösung nicht gefunden. Dann denke ich, kann ich Bodenpolster verwenden? Und ja, es ist Arbeit für mich.

Ich teile Ihnen den Code mit. 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" />
1
Yuvi

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>
0
Harish Godara

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

0
jyothish

Stell sicher dass du hast layout_height wie wrap_content für RelativeLayout und RecyclerView

0

Erstellen Sie ein FrameLayout, in das die RecycerView eingefügt wird, und zwar sowohl für die Breite als auch für die Höhe. Sie können das Rahmenlayout beliebig skalieren.

0
vanJoseph

fügen Sie Android: layout_gravity = "top" der Recycler-Ansicht hinzu. Wenn dies nicht funktioniert hat, füge Android hinzu: layout_gravity = "fill_verticle"

0
  <RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginTop="150dp"
  Android:layout_marginStart="@dimen/_20"
    Android:layout_marginEnd="@dimen/_20"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout">

    <Android.support.v7.widget.RecyclerView
        Android:id="@+id/recycler_Bookingagain"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="8dp"
        Android:focusableInTouchMode="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />

</RelativeLayout>
0
Yogesh Sharma