使用本机库中的功能的 Xamarin 表单应用程序
Posted
技术标签:
【中文标题】使用本机库中的功能的 Xamarin 表单应用程序【英文标题】:Xamarin form app using functionality from native libraries 【发布时间】:2018-02-25 12:07:08 【问题描述】:我的应用中唯一特定于平台的代码来自本机库。所以我看到了两个选择:
1. ios 和 android 项目引用其适当的绑定。这将要求它们都处理需要这些平台相关库的 UI 事件。
2. 创建一个共享项目,该项目将围绕绑定项目创建包装器以创建统一的 API,然后使用编译器指令选择适当的实现。
我不确定第一个选项是否可行:本机处理 UI 事件并将共享响应返回到跨平台 xamarin 表单项目以进行进一步处理。
我相信第二种选择,两个应用程序都将包含所有代码。如果我已经使用 .NET Standard 代码共享策略,我也不知道是否可以使用共享项目(因为 .NET 标准不支持编译器指令而需要)。
【问题讨论】:
【参考方案1】:我不确定第一个选项是否可行:本机处理 UI 事件并将共享响应返回到跨平台 xamarin 表单项目以进行进一步处理。
这是可以实现的,因为所有表单的控件都是通过渲染器渲染成原生的。您只能通过Custom Renderer 访问本机控件。为了将共享响应返回给表单项目,您可以通过自定义控件上的自定义事件来实现这一点,就像 Cusom ListView Sample 的 ItemSelected
事件:
在 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 Standard 代码共享策略,我也不知道是否可以使用共享项目(因为 .NET 标准不支持编译器指令而需要)。
我相信您需要将您的PCL
项目更改为共享项目。当然,一些代码修改是必要的。但这不会太多。如果您的意思是您希望您的PCL
引用一个新的Shared Project
。不,我认为它不会起作用。
【讨论】:
以上是关于使用本机库中的功能的 Xamarin 表单应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Forms.Image 中的最终照片保存到 xamarin 表单中的本地
从 Xamarin.iOS 绑定库中引用 Storyboard
Xamarin表单 - 如何使用标题生成iOS ListView本机分组样式?