我正在开发一款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不会错开?我该如何解决?
答案 0 :(得分: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
答案 1 :(得分:1)
使用android:adjustViewBounds="true"
答案 2 :(得分:-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(位置)); }