Xamarin Forms CollectionView 自定义布局设计
Xamarin Forms CollectionView Custom Layout Design
在我设计的应用程序中,我使用 collectionview 来显示大量图像。这是 my current design.
这是the design I want。
其中高度较短的图像将由下一张图像填充空白区域。
这是我的代码:
<CollectionView x:Name="cv_WallPapers"
ItemsSource="{Binding Results, Mode=TwoWay}"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
SelectionMode="Single"
SelectionChanged="cv_WallPapers_SelectionChanged"
>
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical"
Span="2"
VerticalItemSpacing="5"
HorizontalItemSpacing="5"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Frame Padding="4"
BorderColor="#34eba8"
BackgroundColor="#34eba8"
CornerRadius="10"
HasShadow="False">
<Image Source="{Binding urls.regular}"
HorizontalOptions="FillAndExpand"/>
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我不知道如何在 Xamarin 中做到这一点。并感谢您的帮助!
不幸的是,Forms 中的CollectionView 直到现在仍然不支持这样的布局。但是,我们可以使用 Custom Renderer 作为 Android 中的解决方法。
public class MyCollectionViewRenderer: CollectionViewRenderer
{
public MyCollectionViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<ItemsView> elementChangedEvent)
{
base.OnElementChanged(elementChangedEvent);
if(elementChangedEvent.NewElement!=null)
{
this.SetLayoutManager(new StaggeredGridLayoutManager(2, 1));
}
}
}
在iOS中,因为原生iOS中的UICollectionView没有这样的属性或API,所以我们需要手动实现(重新计算每一项的大小并设置偏移量)。您可以参考 https://developer.apple.com/documentation/uikit/uicollectionview/customizing_collection_view_layouts?language=objc 。我会尽快 post 功能请求。
在我设计的应用程序中,我使用 collectionview 来显示大量图像。这是 my current design.
这是the design I want。 其中高度较短的图像将由下一张图像填充空白区域。
这是我的代码:
<CollectionView x:Name="cv_WallPapers"
ItemsSource="{Binding Results, Mode=TwoWay}"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
SelectionMode="Single"
SelectionChanged="cv_WallPapers_SelectionChanged"
>
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical"
Span="2"
VerticalItemSpacing="5"
HorizontalItemSpacing="5"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Frame Padding="4"
BorderColor="#34eba8"
BackgroundColor="#34eba8"
CornerRadius="10"
HasShadow="False">
<Image Source="{Binding urls.regular}"
HorizontalOptions="FillAndExpand"/>
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我不知道如何在 Xamarin 中做到这一点。并感谢您的帮助!
不幸的是,Forms 中的CollectionView 直到现在仍然不支持这样的布局。但是,我们可以使用 Custom Renderer 作为 Android 中的解决方法。
public class MyCollectionViewRenderer: CollectionViewRenderer
{
public MyCollectionViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<ItemsView> elementChangedEvent)
{
base.OnElementChanged(elementChangedEvent);
if(elementChangedEvent.NewElement!=null)
{
this.SetLayoutManager(new StaggeredGridLayoutManager(2, 1));
}
}
}
在iOS中,因为原生iOS中的UICollectionView没有这样的属性或API,所以我们需要手动实现(重新计算每一项的大小并设置偏移量)。您可以参考 https://developer.apple.com/documentation/uikit/uicollectionview/customizing_collection_view_layouts?language=objc 。我会尽快 post 功能请求。