如何在Xamarin.forms中使用Float Action Button与PCL项目表单代码共享?

时间:2017-08-11 12:13:24

标签: c# android xamarin xamarin.android xamarin.forms

我是Xamarin,Xamarin.Forms和C#平台的新手。

我正在使用这些技术进行一些实验,现在我正在搜索如何在Xamarin.Forms中使用平台特定的UI组件与PCL项目进行代码共享。

在网上搜索我发现了一些FAB按钮(example)的实现,但这些实现已被弃用或放弃。

我知道可以Embed Native Controls into Xamarin.Forms,但这种方法使用SAP项目......

我的问题是:有没有办法将FAB按钮(或其他一些特定于平台的UI控件)用于带有PCL项目的Xamarin.Forms解决方案以进行代码共享?如果是,那么其他平台的行为是什么?我希望iOS UI上不显示FAB按钮。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我不会在此建议任何第三方库,但通常我们可以使用Custom Renderers从PCL使用目标平台的本机控件。

对于Android平台的FloatingActionButton,您可以尝试实现视图渲染器。

例如,在PCL中创建一个名为MyFloatButton的类:

public class MyFloatButton : View
{
}

然后在android项目中创建另一个名为MyFloatButtonRenderer的类,例如:

[assembly: ExportRenderer(typeof(MyFloatButton), typeof(MyFloatButtonRenderer))]

namespace NameSpace.Droid
{
    public class MyFloatButtonRenderer : Xamarin.Forms.Platform.Android.ViewRenderer<MyFloatButton, FloatingActionButton>
    {
        private FloatingActionButton fab;

        protected override void OnElementChanged(ElementChangedEventArgs<MyFloatButton> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                fab = new FloatingActionButton(Xamarin.Forms.Forms.Context);
                fab.LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
                fab.Clickable = true;
                fab.SetImageDrawable(Resources.GetDrawable(Resource.Drawable.icon));
                SetNativeControl(fab);
            }

            if (e.NewElement != null)
            {
                fab.Click += Fab_Click;
            }

            if (e.OldElement != null)
            {
                fab.Click -= Fab_Click;
            }
        }

        private void Fab_Click(object sender, EventArgs e)
        {
        }
    }
}
  

我希望iOS UI上不显示FAB按钮。

如果您只想为Android平台显示此控件,您可以在页面的PCL xaml中进行编码,例如:

<OnPlatform x:TypeArguments="View">
    <OnPlatform.Android>
        <local:MyFloatButton WidthRequest="50" HeightRequest="50" HorizontalOptions="Center" />
    </OnPlatform.Android>
    <OnPlatform.iOS>
        <!--use other view here-->
    </OnPlatform.iOS>
</OnPlatform>

或者您可以检查后面的代码中添加此控件,请查看此博客:Embedding Native Controls into Xamarin.Forms