RecyclerView正在切断最后一项

时间:2015-09-23 14:46:03

标签: android android-layout android-recyclerview

我有一个带有工具栏的片段,里面有一个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-09-23 google libraries的最新版本,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:fitsSystemWindows =&#34; true&#34;应该只在CoordinatorLayout,AppBarLayout和theCollapsingToolbarLayout(我们希望根据Android 5.x上的屏幕进行调整),app:layout_scrollFlags应设置为&#34;滚动| enterAlways | enterAlwaysCollapsed&# 34;并且工具栏应该具有高度,actionBar的高度。最后,最好尽量保持RecyclerView的清洁,以便控制每个行项目的布局间距。

25 个答案:

答案 0 :(得分:20)

尝试将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的高度。

答案 1 :(得分: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>

答案 2 :(得分:2)

将RelativeLayout用作RecycerView的父级。对我来说这是正常的工作。

答案 3 :(得分:2)

如果您使用约束布局,请确保layout_height0dplayout_constraintBottom_toBottomOf约束设置正确。

  <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/titleTextView"
     />

答案 4 :(得分:2)

设置layout_height="match_parent",然后添加layout_marginBottom="?attr/actionBarSize"50dp将补偿ToolBar迫使RecyclerView下移以切断最后一个视图。

如果您启用了nestedScrollingEnabled="false"工具栏,请另外设置hideOnScroll

<androidx.recyclerview.widget.RecyclerView
     android:id="@+id/my_recycler_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_marginBottom="?attr/actionBarSize"
     android:nestedScrollingEnabled="false"  />

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

我也遇到了同样的问题,我创建了一个LinearLayout并将RecyclerView放在其中,这解决了我的问题。我希望这也可以解决其他问题。

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/companyLabelView">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/companiesRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/_8dp"
        android:layout_marginStart="@dimen/_8sdp"
        android:layout_marginLeft="@dimen/_8sdp"
        android:layout_marginTop="@dimen/_8sdp"
        android:layout_marginEnd="@dimen/_8sdp"
        android:layout_marginRight="@dimen/_8sdp"
        android:layout_marginBottom="@dimen/_8sdp"
        android:overScrollMode="never"
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:spanCount="3"
        tools:itemCount="10"
        tools:listitem="@layout/company_item_view" />

</LinearLayout>

答案 8 :(得分:0)

我遇到了同样的问题,经过大量搜索,我发现持有recycleView的父视图没有像我使用constraintLayout那样受到适当约束,

我的视图层次结构就像

constraintLayout->pageViewer with tab->fragment->recyclerView

在我的情况下,pageViewer的约束不正确

要解决此问题,请检查父母是否正确疏远或受到限制的天气

答案 9 :(得分:0)

将约束布局(父布局)更改为线性布局为我解决了这个问题。

答案 10 :(得分:0)

在这种情况下,我在 recyclerView 上添加了一个约束,使其不会在屏幕外重叠

app:layout_constraintBottom_toBottomOf="parent"

答案 11 :(得分:0)

android:paddingBottom ="112dp"

不可见区域的高度<在我的情况下为 112dp>

在您的回收站视图中添加以上内容

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/main_recycler"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    android:paddingBottom="112dp"
    app:layout_constraintTop_toBottomOf="@+id/simpleSearchView" />

答案 12 :(得分:0)

android:paddingBottom ="112dp"

不可见区域的高度<在我的情况下为 112dp>

答案 13 :(得分:0)

将宽度和高度设置为 match_parent 并在底部添加一个边距,顶部栏的值。这使我免于数小时的辛勤工作。

     <android.support.v7.widget.RecyclerView
            android:id="@+id/simpleList"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="App_bar_height
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

答案 14 :(得分:0)

我有类似的问题。将android:minHeight="?attr/actionBarSize"添加到CollapsingToolbarLayout很有帮助。

答案 15 :(得分:0)

我遇到了同样的问题,答案也有所帮助。

我通过将android:minHeight="?actionBarSize"添加到CollapsingToolbarLayout来解决了这个问题。

也许这会帮助某人。

答案 16 :(得分:0)

我知道我迟到了,但是今天我遇到了同样的问题。我有一个{ "ProjectDocumentId": "7da0011b-7105-4b6c-af13-12b5ac50b608", "ProjectId": "ed1e0e47-ff1c-47be-b5e9-c235aef76161", "ProjectDocumentUpdate": { "UpdatedByFullName" : "Unnati" }, { "UpdatedByFullName" : "Eugene" }, { "UpdatedByFullName" : "Meghana" } } ,一个工具栏,一个recyclerview。因此,我使用了ConstrantLayout,并且为了防止recyclerview与顶部栏重叠,我使用了android:layout_height="match_parent"

所以整个代码看起来像这样:

app:layout_constraintTop_toBottomOf="@id/toolbar"
        android:layout_marginTop="?attr/actionBarSize"

我希望这会有所帮助。

答案 17 :(得分:0)

您缺少底部约束。 您应该添加: app:layout_constraintBottom_toBottomOf="parent"上的recylerview

答案 18 :(得分: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>

答案 19 :(得分:0)

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

我正在与您共享代码。 除了高度,宽度和填充之外,不需要任何其他属性。

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

答案 20 :(得分: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>

答案 21 :(得分:0)

确保您同时具有RelativeLayout和RecyclerView的layout_height作为wrap_content

答案 22 :(得分:0)

创建一个FrameLayout,将RecycerView放入其中,并为宽度和高度设置match_parent。您可以根据需要调整框架布局的大小。

答案 23 :(得分:0)

将android:layout_gravity =“top”添加到回收站视图。如果这不起作用,请添加android:layout_gravity =“fill_verticle”

答案 24 :(得分:-1)

GET _cluster/stats?filter_path=indices.count