RecyclerView切断了最后一个项目

问题描述 投票:29回答:11

我有一个片段,里面有一个工具栏和一个recyclerView。

我正在用虚拟数据填充recyclerView,然后尝试显示它们。由于某些原因,recyclerView的最后一个元素已被截断。

这是该片段的XML:

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

列表中的项目非常简单:

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

我现在在列表的末尾,但是最后一个元素仍然看起来很完整。

我正在使用截至2015年9月23日的Google库最新版本23.0.1(即com.android.support:recyclerview-v7:23.0.1),并在build.gradle中使用以下配置:

compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
   minSdkVersion 14
   targetSdkVersion 23
   versionCode 1
   versionName "1.0"

   multiDexEnabled true// Enabling multidex support
 }

由于我要解决这个问题:(

解决方案

好吧,在将代码精简为基本要点并消除了复杂性之后,我发现了问题:这是错误的标志以及缺失或多余的属性的组合。以下适用于Android 4.x和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>
<
android android-layout android-recyclerview
11个回答
22
投票
尝试将RecyclerView的高度更改为"wrap_content",然后将AppBarLayout的高度添加为底边。

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

列表项的切除部分,是AppBarLayout的高度。

0
投票
创建FrameLayout,将RecycerViewmatch_parentwidth都放入其中。您可以根据需要调整height的大小。

-1
投票
framelayout添加到android:layout_gravity="top"。如果这不起作用,请添加recyclerview

4
投票
这对我有用。将recyclerView的高度和宽度都设置为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>


3
投票
使用RelativeLayout作为RecycerView的父级。它对我有用。

1
投票
我在ConstraintLayout中使用RecyclerView时遇到了同样的问题(甚至从列表中丢失了整个ViewHolder元素)。如Sila Siebert所述,将RecyclerView的layout_width和layout_height设置为零就可以了。有点混乱,因为编辑器在XML文本显示0dp之后跳回了“ match_constraints”。不要让它感到困惑,它应该可以工作。

1
投票
我有一个包含RecyclerView的对话框片段。对于我最初的总体约束布局,上述解决方案均无效,因此我将其更改为线性布局,该布局没有问题。此布局包含工具栏和recyclerview。

1
投票
我尝试了大多数可能的站点中所有可用的选项,但没有得到解决方案。然后,我想可以使用底部填充吗?是的,这对我有用。

我正在与您共享代码。除了高度,宽度和内边距,只需要其他属性。

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

0
投票
您可以尝试按照预期的方式进行操作:

<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
投票
<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
投票
确保layout_heightwrap_content都具有RelativeLayout作为RecyclerView
© www.soinside.com 2019 - 2024. All rights reserved.