我使用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>
答案 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>