Xamarin使用本机库的功能构建应用程序

时间:2018-02-25 12:07:08

标签: android ios xamarin xamarin.forms xamarin-binding

我的应用中唯一特定于平台的代码来自本机库。所以我看到两个选择:

1。 iOS和Android项目引用其相应的绑定。这将要求它们都处理需要这些依赖于平台的库的UI事件。

2。创建一个共享项目,该项目将围绕绑定项目创建包装器以创建统一的API,然后使用编译器指令来选择适当的实现。

我不确定第一个选项是否可以实现:本地处理UI事件并将共享响应返回到跨平台xamarin表单项目以进行进一步处理。

我相信第二个选项,两个应用都包含所有代码。如果我已经使用.NET标准代码共享策略(因为.NET标准不支持编译器指令),我也不知道是否可以使用共享项目。

1 个答案:

答案 0 :(得分:1)

  

我不确定第一个选项是否可以实现:本地处理UI事件并将共享响应返回到跨平台xamarin表单项目以进行进一步处理。

这是可以实现的,因为所有形式的控件都通过渲染器呈现为原生。您只能通过Custom Renderer访问本机控件。要将共享响应返回到表单项目,您可以通过自定义控件上的自定义事件来实现这一点,就像Cusom ListView SampleItemSelected事件:

在PCL:

public class NativeListView : ListView
{
  ...
  public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
  ...
}

在自定义渲染器中:

Control.ItemClick += OnItemClick;

...
void OnItemClick(object sender, Android.Widget.AdapterView.ItemClickEventArgs e)
{
    ((NativeListView)Element).NotifyItemSelected(((NativeListView)Element).Items.ToList()[e.Position - 1]);
}

但是如果您的项目中有许多特定于平台的功能。使用共享项目是一个不错的选择。

  

如果我已经使用.NET标准代码共享策略(因为.NET标准不支持编译器指令),我也不知道是否可以使用共享项目。

我相信您需要的是将您的PCL项目更改为共享项目。当然,一些代码修改是必要的。但这不会太多。如果您的意思是希望PCL引用新的Shared Project。不,我认为它不会起作用。