我想在Android中实现以下目标:
请注意,内容是动态的,因此在编译时无法固定列的宽度。行数是动态的,但是列数是固定的。
在WPF中,我将使用ItemsControl
作为StackPanel
的{{1}}。然后,我将ItemsPanel
设置为包含ItemTemplate
和DataTemplate
的{{1}}的{{1}}。像这样:
Grid
我不知道如何在Android中做到这一点。
我知道我必须使用ColumnDefinition
(相当于SharedSizeGroup
)和<DataTemplate DataType="MyViewModel" x:Key="MyItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Col0"/>
<ColumnDefinition SharedSizeGroup="Col1"/>
<ColumnDefinition SharedSizeGroup="Col2"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text={Binding Column0} Margin="0 0 5 0"/>
<TextBlock Grid.Column="1" Text={Binding Column1} Margin="0 0 5 0"/>
<TextBlock Grid.Column="2" Text={Binding Column2}/>
</Grid>
</DataTemplate>
<ItemsControl ItemTemplate={StaticResource MyItemTemplate}>
<ItemsControl.ItemsPanel>
<StackPanel Grid.IsSharedSizeScope="True"/>
</ItemsControl>
</ItemsControl>
(相当于RecyclerView
)。但是如何匹配每个项目中的列大小?
答案 0 :(得分:0)
您应该使用RecyclerView
。但首先,请尝试使用GridView
:
<GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:stretchMode="columnWidth"
android:numColumns="3"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:padding="10dp"/>