AutoFitRecyclerView网格的方形项目

时间:2016-10-20 09:21:48

标签: android android-recyclerview

我使用Autofit网格进行了recyclerview的网格实现,详见此处:

http://blog.sqisland.com/2014/12/recyclerview-autofit-grid.html

但是,尽管修复了网格项目大小,但我的网格项不是正方形(它们是矩形)。有没有办法在保持自动调整属性的同时使项目成为正方形(如实际的GridView

item_grid_image.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         android:id="@+id/image_wrapper"
         android:layout_width="140dp"
         android:layout_height="140dp"
         android:padding="1dp"
         android:layout_centerInParent="true">

    <com.makeramen.roundedimageview.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@null"
        android:scaleType="centerCrop"
        tools:src="@drawable/file_directory" /> 

</FrameLayout>

fragment_recyclerview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/grid_view_wrapper"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <com.project.AutoFitRecyclerView
            android:id="@+id/grid_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/count_text_view"
            android:layout_alignParentTop="true"
            android:columnWidth="140dp"
            android:layout_centerInParent="true"
            android:requiresFadingEdge="vertical"
            tools:listitem="@layout/item_grid_image">
        </com.project.AutoFitRecyclerView>

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

所以原因是你的RecyclerView宽度可以被columnWidth属性整除,这是非常罕见的。这意味着您的实际列宽几乎总是大于140dp,而单元格高度始终为140dp。

要解决此问题,您需要使图像与列宽匹配,并使高度与宽度匹配。实现此目的的一种方法是使用SquareFrameLayout

<com.project.SquareFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/image_wrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="1dp">

    <com.makeramen.roundedimageview.RoundedImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@null"
        android:scaleType="centerCrop"
        tools:src="@drawable/file_directory" />

</com.project.SquareFrameLayout>