Xamarin 使用网格卡的Android回收器视图
我有一个回收器视图,其中的卡片呈线性排列,如下所示:这是我当前的界面,我需要一个混合视图的帮助,如第二幅图所示 但我需要一个混合视图,其中包含如下网格:这是我的目标界面 **我需要帮助实现这一目标: 这就是我迄今为止所尝试的 **card.axml****Xamarin 使用网格卡的Android回收器视图,xamarin,xamarin.android,Xamarin,Xamarin.android,我有一个回收器视图,其中的卡片呈线性排列,如下所示:这是我当前的界面,我需要一个混合视图的帮助,如第二幅图所示 但我需要一个混合视图,其中包含如下网格:这是我的目标界面 **我需要帮助实现这一目标: 这就是我迄今为止所尝试的 **card.axml**** <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="350dp"
app:cardCornerRadius="10dp"
android:layout_margin="6dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/avatar2"
android:layout_width="match_parent"
android:layout_height="160dp"
android:scaleType="centerCrop"
android:src="@drawable/cheese_1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/Text11"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:maxLines="2"
android:textColor="#000"
android:textSize="18sp" />
<TextView
android:id="@+id/Text12"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:textColor="#555" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="share"
android:theme="@style/PrimaryFlatButton" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="explore"
android:theme="@style/PrimaryFlatButton" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
在
SetUpRecyclerView
方法中,使用GridLayoutManager
而不是LinearLayoutManager
,跨度计数为2,然后在布局管理器上调用SetPansizeLookup
。通过自定义跨距大小查找,您可以确定哪些项目将跨越整个布局
一个简单的例子:
SimpleStringRecyclerViewAdapter myAdapter = new SimpleStringRecyclerViewAdapter(recyclerView.Context, dataUse)
GridLayoutManager layoutManager = new GridLayoutManager(recyclerView.Context, 2);
layoutManager.SetSpanSizeLookup(new SpanSizeLookup(myAdapter));
recyclerView.SetLayoutManager(layoutManager);
recyclerView.SetAdapter(myAdapter);
和SpanSizeLookup
类:
internal class SpanSizeLookup : GridLayoutManager.SpanSizeLookup
{
private SimpleStringRecyclerViewAdapter _adapter;
public SpanSizeLookup(SimpleStringRecyclerViewAdapter adapter) => _adapter = adapter;
public override int GetSpanSize(int position)
{
return _adapter.GetItemViewType(position);
}
}
在您的SimpleStringRecycleServiceAdapter
类重写GetItemViewType
中,这样做符合您决定哪些项跨越整个宽度的方式;我在这里使用IsHeader,但您可以随意使用:
public override int GetItemViewType(int position)
{
if(mValues[position].IsHeader)
return 1;
else
return 2;
}
您还可以通过返回带有
GetItemViewType
的枚举来进一步自定义它,并在SpanSizeLookup
中确定span计数。您的问题是什么?我需要帮助创建第二张图中所示的网格卡谢谢,已经解决了问题,按照相同的步骤操作。将标记为答案
internal class SpanSizeLookup : GridLayoutManager.SpanSizeLookup
{
private SimpleStringRecyclerViewAdapter _adapter;
public SpanSizeLookup(SimpleStringRecyclerViewAdapter adapter) => _adapter = adapter;
public override int GetSpanSize(int position)
{
return _adapter.GetItemViewType(position);
}
}
public override int GetItemViewType(int position)
{
if(mValues[position].IsHeader)
return 1;
else
return 2;
}