web-dev-qa-db-ja.com

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

私は今リストの最後にいますが、最後の要素はまだカットオフに見えます。

Googleライブラリの2015-09-23現在の最新バージョン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 = "true"は、coordinatorLayout、AppBarLayout、theCollapsingToolbarLayoutにのみ存在する必要があります(これらはAndroid 5.xの画面に基づいて調整したいものです) )、app:layout_scrollFlagsを "scroll | enterAlways | enterAlwaysCollapsed"に設定し、ツールバーの高さ、actionBarの高さを設定する必要があります。各広告申込情報で。

29

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の高さです。

22
Rami

これは私のために働いた。 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>
4
Sila Siebert

RelativeLayoutをRecycerViewの親として使用してください。

2
jyothish

ConstraintLayout内でRecyclerViewを使用しているときに、同じ問題が発生しました(リストからViewHolder要素全体が欠落することさえありました)。 Sila Siebert が述べたように、RecyclerViewのlayout_widthとlayout_heightをゼロに設定することは、トリックを行いました。 XMLテキストが0dpを示している間、少し後にエディターがジャンプして「match_constraints」と言うので、少し混乱します。混乱させないでください、動作するはずです。

1
Pauliman

RecyclerViewを含むダイアログフラグメントがあります。最初の全体的な制約レイアウトでは、上記のソリューションはどれも機能しなかったため、問題なく機能する線形レイアウトに変更しました。このレイアウトには、ツールバーとrecyclerviewが含まれています。

1
Greg Holst

可能なサイトのほとんどから利用可能なすべてのオプションを試しましたが、解決策が得られませんでした。次に、下のパディングを使用できますか?そして、はい、それは私のために働いています。

私はあなたにコードを共有しています。高さ、幅、パディング以外の属性は必要ありません。

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

これが期待どおりに機能しているので、次のことを試してください:

<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
Harish Godara

layout_height as wrap_contentRelativeLayoutRecyclerViewの両方に対して

0

FrameLayoutを作成し、RecycerViewを入れてmatch_parentwidthheightの両方。 framelayoutのサイズは自由に設定できます。

0
vanJoseph
  <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
Yogesh Sharma