2

我试图在 RecyclerView 的项目下显示阴影,但项目之间没有空格

我正在尝试重现类似的东西:

UI设计

我已经实现了 RecyclerView 和 FlexboxLayout,因此项目占据了屏幕的整个位置。

这是回收站视图声明:

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/category_item"
    android:clipToPadding="false"
    android:paddingEnd="20dp"
    android:paddingBottom="20dp"/>

这是项目布局:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.flexbox.FlexboxLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/itemContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:justifyContent="center"
    android:elevation="8dp"
    >

        <TextView
            android:id="@+id/itemTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawablePadding="20dp"
            android:gravity="center"
            android:textSize="16sp" />

</com.google.android.flexbox.FlexboxLayout>

onBindViewHolder以及来自适配器的方法:

@Override
public void onBindViewHolder(final CategoryViewHolder holder, int position) {
    if (categories != null) {
        Category category = categories.get(position);
        holder.itemTitle.setText("Lorem ipsum");
        ViewGroup.LayoutParams lp = holder.itemContainer.getLayoutParams();

        holder.itemContainer.setBackgroundResource(category.getColor());

        if (lp instanceof FlexboxLayoutManager.LayoutParams) {
            FlexboxLayoutManager.LayoutParams flexboxLp =
                    (FlexboxLayoutManager.LayoutParams) holder.itemContainer.getLayoutParams();
            flexboxLp.setFlexGrow(1.0f);
        }
    }
}

这是我得到的:

我的应用程序设计

如您所见,我放置了一个填充,以便我们可以看到后面的阴影,但由于项目之间没有空间,因此不会显示阴影。我希望阴影显示在其他项目之上

我不知道如何在项目之间进行漂亮的分隔,否则我已经尝试过,DividerItemDecoration但它没有按预期工作。

4

2 回答 2

0

我在这里找到了解决方案:https ://stackoverflow.com/a/35406689/9434800

我创建了一个渐变资源:

<shape xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="90"
        android:centerColor="@color/c1"
        android:centerY="90%"
        android:endColor="@color/c1_darker"
        android:startColor="@color/c1"
        android:type="linear" />

</shape>

我将它设置为我的项目的背景,这样我的项目顶部更暗,看起来像是它们上方项目的阴影。

于 2018-04-28T17:08:07.380 回答
0

您可以尝试使用适配器的自定义布局。进入底部的自定义布局,你可以给你的边框或阴影。它会为你工作。

于 2018-04-28T05:59:24.100 回答