Tengo un fragmento con una barra de herramientas y un recyclerView en su interior.

Estoy rellenando la recyclerView con datos ficticios y, a continuación, tratar de mostrar a ellos. Por alguna razón, el último elemento de la recyclerView es llegar cut-off.

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 sencillos:

<?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>

RecyclerView es cortar el último elemento

Ahora estoy en el final de la lista, pero el último elemento todavía se ve cut-off.

Estoy usando la última versión de 2015-09-23 de bibliotecas de google, 23.0.1, (es decir, com.android.apoyo:recyclerview-v7:23.0.1), y la siguiente configuración en la construcción.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 me estoy volviendo loco con este problema 🙁

SOLUCIÓN

Aceptar, después de limpiar el código a lo más esencial y la eliminación de la complejidad, he encontrado el problema: se trata de una combinación de mal banderas y la falta o atributos adicionales. El siguiente funciona bien tanto en 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 se debe a la coordinatorLayout, AppBarLayout y theCollapsingToolbarLayout (que son los que queremos ser ajustadas en base a la pantalla en Android 5.x), la app:layout_scrollFlags debe estar establecido en «scroll|enterAlways|enterAlwaysCollapsed» y la barra de herramientas debe tener como altura, la altura de la actionBar. Por último, es mejor mantener el RecyclerView tan limpia como sea posible de modo que usted puede controlar el diseño de espacios en cada artículo de línea.

  • estás resolver el problema?
  • Actualizado a la pregunta con la solución que he encontrado
  • Puede usted por favor escribir exactamente lo que estaba mal y cuál es la solución? Se tarda demasiado tiempo para comprobar las diferencias entre las viejas y nuevas versiones
  • La mía es una simple restricción de diseño con sólo una barra de herramientas y un recyclerview. Su solución no puede satisfacer en mi caso. Pero @Rami solución sonidos genéricos para el problema, ya que la altura de la barra de la aplicación de diseño necesarios para ajustarse a la parte inferior de margen para corregir el problema.

11 Comentarios

  1. 22

    Intentar cambiar su RecyclerView altura a "wrap_content" y agregar el AppBarLayout altura del margen inferior.

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

    El corte de la parte del elemento de la lista, es la altura de la AppBarLayout.

    • debe marginBottom se establece en 0 si se trata de un dispositivo con android 5 o superior?
    • La adición de un margen fijo para mí. Gracias hombre, me salvó un par de horas!
    • ¿Por qué funciona esto?
  2. 4

    Esto funcionó para mí.
    Establecer la altura y la anchura de la recyclerView a 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>
    • estás seguro de hacer 0dp a la anchura y la altura va a solucionar el problema? no trabajado a mi lado sharfe su respuesta
    • Está usted usando ConstraintLayout?
    • Yo estoy usando la restricción de diseño y ajustar la altura y la anchura de 0dp pero no funciona. Creo que se adjunta recycler en cualquier otro diseño y ajustar la altura ancho no? Se puede compartir la respuesta completa por favor ?
    • este fue mi problema 0dp
  3. 2

    Uso RelativeLayout como padre de RecycerView.Se está trabajando para mí.

    • sí, funcionó para mi escenario, donde estaba de llenar los datos en la cuadrícula utilizando anidados Recyler puntos de vista y con la LL ser padre hizo que mi última vista de corte y desplazable dentro de sus fronteras, en lugar de LL desplazable. Tener RL como padre hizo el truco y todo el diseño es ahora desplazable como yo quería.
  4. 1

    Yo tenía el mismo problema (incluso, la pérdida de toda una ViewHolder elemento de mi lista), mientras que el uso de un RecyclerView dentro de un ConstraintLayout. Como Sila Siebert mencionado, la configuración de layout_width y layout_height de la RecyclerView a cero hizo el truco. Es un poco confuso causa el editor vuelve a decir «match_constraints» después de un poco, mientras que el XML de texto dice 0dp. No se deje confundir, se debe trabajar.

  5. 1

    Tengo un fragmento de diálogo que contiene el RecyclerView. Para mi inicial total restricción de diseño de ninguna de las soluciones anteriores funcionó, así que me la cambió a un esquema lineal, que funciona sin problemas. Este diseño contiene una barra de herramientas y la recyclerview.

    • Trate de @Rami respuesta (publicado después de la suya). Puede trabajar para usted.
  6. 1

    He intentado todas las opciones disponibles de la mayoría de posible sitio pero no consigo la solución.
    Entonces, yo creo que puedo usar la parte inferior de relleno? Y Sí, Es un trabajo para mí.

    Estoy compartiendo el código para usted.
    Nada más atributo requerido de otra que la altura, la anchura & padding.

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

    Usted puede tratar de seguir como está funcionando como se esperaba:

    <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>
  8. 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>
    • proporcione una explicación de cómo y por qué esto resuelve el problema realmente podría ayudar a mejorar la calidad de tu post.
  9. 0

    Crear un FrameLayout poner el RecycerView en lo que tiene que match_parent tanto para el width y la height. Puede cambiar el tamaño de la framelayout sin embargo que usted desea.

Dejar respuesta

Please enter your comment!
Please enter your name here