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>
![Я сейчас в конце списка, но последний элемент по-прежнему выглядит отключенным]()
Я сейчас в конце списка, но последний элемент по-прежнему выглядит отключенным.
Я использую последнюю версию с 2015-09-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: fitsSystemWindows = "true" должен находиться только у координаторовLayout, AppBarLayout и CollapsingToolbarLayout (которые мы хотим настроить на основе экрана на Android 5.x), приложение: layout_scrollFlags должен быть установлен в "прокрутить | enterAlways | enterAlwaysCollapsed", а панель инструментов должна иметь высоту, высоту actionBar. Наконец, лучше оставить RecyclerView максимально чистым, чтобы вы могли контролировать расстояние между макетами в каждой позиции.
Ответы
Ответ 1
Попробуйте изменить высоту 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
.
Ответ 2
Это сработало для меня. Установите и высоту и ширину ресивера в 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. Это работает для меня.
Ответ 4
У меня была та же проблема (даже отсутствующий весь элемент ViewHolder из моего списка) при использовании RecyclerView внутри ConstraintLayout. Как упомянула Сила Зиберт, установка нулевого значения layout_width и layout_height в RecyclerView сделала свое дело. Это немного сбивает с толку, потому что редактор через некоторое время возвращается к слову "match_constraints", в то время как XML-текст показывает 0dp. Не позволяйте этому сбить вас с толку, это должно работать.
Ответ 5
У меня есть фрагмент диалога, который содержит RecyclerView. Для моего начального общего макета ограничения ни одно из вышеупомянутых решений не работало, поэтому я изменил его на линейный макет, который работает без проблем. Этот макет содержит панель инструментов и обзор переработчика.
Ответ 6
добавить android:layout_gravity="top"
для просмотра recyclerview
. если это не сработало, добавьте android:layout_gravity="fill_verticle"
Ответ 7
Создайте FrameLayout
поместите в него RecycerView
с его match_parent
как для width
и для height
. Вы можете framelayout
размер framelayout
так, как хотите.
Ответ 8
Убедитесь, что у вас есть layout_height
качестве wrap_content
для RelativeLayout
и RecyclerView
Ответ 9
Вы можете попробовать следующее, поскольку это работает, как ожидалось:
<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>
Ответ 10
Я перепробовал все доступные варианты на большинстве возможных сайтов, но не нашел решения. Тогда, я думаю, я могу использовать нижнюю прокладку? И да, это работает для меня.
Я делюсь кодом с вами. Больше ничего не требуется, кроме высоты, ширины и отступов.
андроид: "атр/actionBarSize" paddingBottom =
<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" />
Ответ 11
<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>