RecyclerView está cortando el último elemento
Tengo un fragmento con una barra de herramientas y un recyclerView dentro de él.
Estoy poblando el recyclerView con datos falsos y luego tratar de mostrarlos. Por alguna razón, el último elemento del recicladorVista está recibiendo corte.
- ¿Que es mejor? NotifyDataSetChanged o notifyItemChanged en el bucle?
- Artículo de reciclaje
- ¿Cómo se puede agregar una línea de divisor en un Android RecyclerView?
- La vista horizontal del reciclador no muestra nada
- Using notifyItemRemoved o notifyDataSetChanged con RecyclerView en Android
Este es el XML del fragmento:
<?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>
Los elementos de la lista son realmente 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>
Ahora estoy al final de la lista, pero el último elemento todavía parece cortado.
Estoy utilizando la última versión a partir de 2015-09-23 de google libraries, 23.0.1, (es decir, com.android.support:recyclerview-v7:23.0.1), y la siguiente configuración en el build.gradle:
compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true// Enabling multidex support }
Cualquier ayuda sería muy apreciada ya que estoy volviendo loco con este problema 🙁
SOLUCIÓN
Ok, después de limpiar el código a los elementos esenciales y eliminar la complejidad, encontré el problema: era una combinación de banderas erróneas y falta o atributos adicionales. Lo siguiente funciona bien para Android 4.x y 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 pocas palabras, android: fitsSystemWindows = "true" sólo debe estar en el coordinatorLayout, AppBarLayout y theCollapsingToolbarLayout (que son los que queremos que se ajusten en base a la pantalla de Android 5.x), la aplicación: layout_scrollFlags debe ser establecido A "scroll | enterAlways | enterAlwaysCollapsed" y la barra de herramientas debe tener como altura, la altura de la barra de acción. Por último, es mejor mantener el RecyclerView tan limpio como sea posible para que pueda controlar el espaciado de diseño en cada elemento de línea.
- RecyclerView.onBindViewHolder sólo se llama una vez
- Los datos del adaptador RecycleView aparecen erróneos al desplazarse demasiado rápido
- Múltiples elementos seleccionados RecyclerView in Activity.java
- Cómo hacer un gesto de deslizamiento en el elemento RecyclerView sin librería de terceros
- PopupMenu no se encuentra correctamente dentro de RecyclerView
- Sdk mínimo para recycleview y pros / contras de reemplazar listas con ella
- Cómo superponer elementos en LinearLayoutManager - RecyclerView (como tarjetas de apilado)
- El desplazamiento de ViewPager no funciona con RecyclerView
Trate de cambiar la altura de RecyclerView
a "wrap_content"
y agregue la altura de AppBarLayout
como fondo de margen.
<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 parte de corte del elemento de lista, es la altura de AppBarLayout
.
Add android: layout_gravity = "arriba" a la vista del reciclador. Si esto no funcionaba, agregue android: layout_gravity = "fill_verticle"
Crear un FrameLayout poner el RecycerView en él que tiene match_parent para el ancho y la altura. Puede dimensionar el diseño del marco como desee.
Dé un margen desde el fondo a su vista Recicladora
<android.support.v7.widget.RecyclerView android:id="@+id/simpleList" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="20dp" app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
- ¿Cómo Android Studio valida XML para la pantalla de preferencias?
- Cambiar el nombre del archivo de salida en el nuevo complemento de Android 3.0.0-alpha1