5

我正在开发一个 Android 应用程序。我不擅长Android开发。在我的应用程序中,我将 RecyclerView 和 CardView 与 StaggeredGridLayoutManager 一起使用。因为我希望列表中的每个单元格大小彼此不同,并且如下图所示交错排列。

在此处输入图像描述

但是当我运行我的应用程序时,单元格不会交错,并且它们的大小彼此相等。

这是截图

在此处输入图像描述

这是我的回收站视图 XML

<android.support.v7.widget.RecyclerView
        android:id="@+id/df_rv_destination"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

这是单元格项目的 XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/di_iv_image"
            android:scaleType="centerCrop"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:textSize="17dp"
            android:textColor="@color/white"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="10dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            android:id="@+id/di_tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

这就是我使用 StaggerGridLayoutManager 配置 RecyclerView 的方式

        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1);
        rcDestinations.setLayoutManager(staggeredGridLayoutManager);
        rcDestinations.setItemAnimator(new DefaultItemAnimator());
        regionsList = new ArrayList<Region>();
        destinationsAdapter = new DestinationsAdapter(getActivity(),regionsList);
        rcDestinations.setAdapter(destinationsAdapter);

那么为什么我的 RecyclerView 没有交错呢?我该如何解决?

4

3 回答 3

3

设置你的图像视图android:adjustViewBounds="true"

于 2016-10-24T12:26:25.663 回答
1

您的单元格项目都具有相同的大小,因为没有什么会改变大小...我想如果您有更大的照片,您想获得更大的项目

首先改变这个:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

对此:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

然后代替:

<ImageView
        android:id="@+id/di_iv_image"
        android:scaleType="centerCrop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

尝试:

<ImageView
        android:id="@+id/di_iv_image"
        android:scaleType="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

并将图像高度缩放到您想要的尺寸,然后再添加它们;)使用cropCenter,您总是可以将图像裁剪为相同的尺寸

666

于 2016-05-29T18:50:42.583 回答
-1

您需要强制调整高度大小以获得您想要的效果。

我正在使用数据绑定,所以设置高度如下:

public int getHeight(int position) {
    Random r = new Random();
    int randomHeight = r.nextInt(Math.abs(mRecyclerViewHeight)/9) + Math.abs(mRecyclerViewHeight)/4;
    if(position%2 == 0){
        randomHeight += Math.abs(mRecyclerViewHeight)/9;
    }
    return randomHeight;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {


        ((DiscoveryViewHolder) holder).bindRepository(mPostList.get(position), getHeight(position));

持有人).bindRepository(mPostList.get(位置));}

于 2017-06-13T10:38:26.227 回答