Приложение Xamarin form с использованием функциональности из нативных библиотек
Единственный платформо-зависимый код в моем приложении поступает из нативных библиотек. Итак, я вижу два варианта:
1. iOS и Android-проекты ссылаются на соответствующие привязки. Это потребовало бы, чтобы они оба обрабатывали события пользовательского интерфейса, которые требуют этих зависящих от платформы библиотек.
2. Создайте общий проект, который будет создавать обертки вокруг связывающих проектов для создания единого API, а затем использовать директивы компилятора для выбора соответствующей реализации.
Я не уверен, что первый вариант выполним: естественная обработка событий пользовательского интерфейса и возвращение общего ответа обратно к кроссплатформенному проекту форм xamarin для дальнейшей обработки.
Я верю во втором варианте, оба приложения будут содержать ВСЕ код. Я также не знаю, смогу ли я использовать общий проект, если уже использую стратегию совместного использования кода.NET Standard (требуется, поскольку стандарт.NET не поддерживает директивы компилятора).
1 ответ
Я не уверен, что первый вариант выполним: естественная обработка событий пользовательского интерфейса и возвращение общего ответа обратно к кроссплатформенному проекту форм xamarin для дальнейшей обработки.
Это достижимо, так как все контролы форм переводятся в native через рендереры. Вы можете получить доступ только к собственному элементу управления через Custom Renderer. А для возврата общего ответа обратно в проект форм вы можете добиться этого с помощью пользовательских событий в пользовательских элементах управления, как в примере Cusom ListView Sample. ItemSelected
Событие:
В PCL:
public class NativeListView : ListView
{
...
public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
...
}
В Custom Renderer:
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
, Нет, я не думаю, что это сработает.