J'ai un fragment avec une barre d'outils et un recyclerView à l'intérieur.
Je renseigne recyclerView avec des données factices, puis essaie de les afficher. Pour une raison quelconque, le dernier élément de recyclerView est en train d’être coupé.
C'est le XML du fragment:
<?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>
Les éléments de la liste sont vraiment simples:
<?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>
Je suis maintenant à la fin de la liste, mais le dernier élément a toujours l’air coupé.
J'utilise la dernière version du 23/09/2015 des bibliothèques de Google, 23.0.1, (c'est-à-dire com.Android.support:recyclerview-v7:23.0.1), ainsi que la configuration suivante sur le build.gradle:
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true// Enabling multidex support
}
Toute aide serait grandement appréciée puisque je suis en train de devenir fou avec ce problème :(
Ok, après avoir nettoyé le code pour l'essentiel et éliminé la complexité, j'ai trouvé le problème: il s'agissait d'une combinaison de mauvais indicateurs et d'attributs manquants ou supplémentaires. Ce qui suit fonctionne bien pour Android 4.x et 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>
En bref, Android: fitsSystemWindows = "true" ne devrait figurer que sur les coordinatorLayout, AppBarLayout et theCollapsingToolbarLayout (qui sont ceux que nous voulons ajuster en fonction de l'écran sous Android 5.x), l'application: layout_scrollFlags doit être définie faire défiler | enterAlways | enterAlwaysCollapsed "et que la barre d’outils doit avoir pour hauteur, la hauteur de la barre d’action. Enfin, il est préférable de garder le plus propre possible RecyclerView afin de pouvoir contrôler l'espacement de la disposition sur chaque élément de campagne.
Essayez de changer votre RecyclerView
height en "wrap_content"
et d’ajouter la AppBarLayout
height au bas de la marge.
<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"/>
La partie coupée de l'élément de liste correspond à la hauteur de AppBarLayout
.
Cela a fonctionné pour moi . Régler la hauteur et la largeur de recyclerView sur 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>
J'ai eu le même problème (même manquant un élément ViewHolder entier de ma liste) en utilisant un RecyclerView à l'intérieur d'un ConstraintLayout. Comme indiqué par Sila Siebert , la mise à zéro de layout_width et de layout_height de RecyclerView a été l’essentiel. C'est un peu déroutant car l'éditeur revient en arrière pour dire "match_constraints" après un peu de temps alors que le texte XML dit 0dp. Ne laissez pas cela vous confondre, cela devrait fonctionner.
J'ai un fragment de dialogue qui contient le RecyclerView. Pour ma structure de contraintes globale initiale, aucune des solutions ci-dessus ne fonctionnait. Je l'ai donc modifiée en une structure linéaire, qui fonctionne sans problème. Cette mise en page contient une barre d’outils et la vue recyclée.
Utilisez RelativeLayout en tant que parent de RecycerView.Il travaille pour moi.
Créer un FrameLayout y placer RecycerView avec match_parent pour la largeur et la hauteur. Vous pouvez redimensionner la disposition du cadre comme vous le souhaitez.
ajoutez Android: layout_gravity = "top" à la vue du recycleur. si cela ne fonctionne pas, ajoutez Android: layout_gravity = "fill_verticle"