Xamarin表单 - 如何创建自定义渲染以在Android上为TableSection提供页脚?

时间:2017-04-20 17:06:43

标签: c# android xamarin xamarin.android tableview

我想将默认的Android页脚添加到Xamarin Forms的tableview中的tablesection。我该怎么做呢?我相信我需要一个tableview自定义渲染器,但我不确定是否已经过了制作它。

1 个答案:

答案 0 :(得分:1)

关于您的其他问题Xamarin Forms - How to create custom render to give TableSection the default iOS Footer?,我不确定您是否要在整个TableViewTableSection的每个TableView中添加页脚。< / p>

如果您要为每个TableSection添加页脚,我建议您在每个TextCell中添加自定义TableSection作为页脚,因为TableSection可以有多个Cell如果你想将页脚添加到TableView,你可以使用例如这样的代码:

public class TableViewWithFooterRenderer : TableViewRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<TableView> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {
            if (Control != null)
            {
                //Add footer to the whole TableView
                var lv = Control as Android.Widget.ListView;
                var footerview = ((LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService))
                    .Inflate(Resource.Layout.TableViewFooter, null, false);
                lv.AddFooterView(footerview);
            }
        }
    }
}

我为页脚创建了一个视图,因为您也可以使用其他视图。我的页脚视图是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="7dp">
  <TextView android:id="@+id/footer"
            android:text="This is footer"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:layout_gravity="center" />
</LinearLayout>

<强>更新

在Android平台中,

TableViewrendered as ListView,因为Android平台中没有本地方法直接为ListView的每个项添加页脚,正如我所建议的,我们可以手动添加自定义TextCellViewCell作为每个项目的页脚。正如您从TableSection的源代码中看到的那样,它是ObservableCollection个对象。

例如:

 <TableSection Title="Section 1 Title">
     <TextCell Text="TextCell Text" Detail="TextCell Detail"></TextCell>
     <ViewCell IsEnabled="False">
         <Grid>
             <Label Text="This is footer" />
         </Grid>
     </ViewCell>
 </TableSection>

我没有在这里定制ViewCell的风格,你可以试试你的风格。