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>
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 :(
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.
Ä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
.
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>
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.
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.
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" />
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>
Verwenden Sie RelativeLayout als übergeordnetes Element von RecycerView.Es arbeitet für mich.
Stell sicher dass du hast layout_height
wie wrap_content
für RelativeLayout
und RecyclerView
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.
fügen Sie Android: layout_gravity = "top" der Recycler-Ansicht hinzu. Wenn dies nicht funktioniert hat, füge Android hinzu: layout_gravity = "fill_verticle"
<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>