我可以在Android中的GridManagerLayout中设置动态列宽吗?

时间:2016-09-24 07:03:37

标签: android android-recyclerview gridlayoutmanager

我有recyclerView gridManagerLayout,如下所示:

GridLayoutManager manager = new GridLayoutManager(Main.this, 10);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);

有没有办法为每列设置不同的宽度?我想要实现这样的事情: enter image description here

如您所见,第0,2,4,6和8列需要小于其他列。

我尝试了manager.setSpanSizeLookup(spanSizeLookup),但我不想更改spanCount的{​​{1}}。

这就是我现在所拥有的enter image description here

我通过调用设置构造函数中每个holder的宽度     itemView.getLayoutParams()。width = THE_WIDTH;

看起来黄线就在他们的位置,不知道为什么其他人有偏移

这是图像的XML

layout manager

这是它们之间空间的xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:adjustViewBounds="true"
    android:layout_centerHorizontal="true"
    android:layout_above="@+id/text"
    android:scaleType="centerCrop"/>

<TextView
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Category name"
    android:layout_alignParentBottom="true"
    android:gravity="center"
    android:background="#7f007f"/>

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

在适配器中,使用layout.params动态设置项目的宽度,例如

tv.setLayoutParams(new ViewGroup.LayoutParams(
10,
ViewGroup.LayoutParams.WRAP_CONTENT));

检查,

if(position%2==0) {
your_item_parent_layout.setLayoutParams(new ViewGroup.LayoutParams(
10,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
else{
your_item_parent_layout.setLayoutParams(new ViewGroup.LayoutParams(
100,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
适配器中的

希望它有所帮助。

答案 1 :(得分:0)

为此,您需要使用getItemViewType的{​​{1}}方法,并且必须发送布局类型,并在AdapteronCreateViewHolder inflate { {1}}根据您的类型。您可以将layoutswidth设置为两个不同的height,如屏幕截图所示