Интеграция Android View в качестве пользовательского элемента управления в Xamarin.Forms

Я использую Xamarin Forms в своем проекте.

По сути, я хочу интегрировать пользовательский элемент управления в свою форму. Этот компонент предоставляется с представлением Android (axml), и я не могу найти способ включить его в свой общий проект Xamarin Forms.

Я попытался создать собственный рендерер:

[assembly: ExportRenderer(typeof(RadialControl), typeof(RadialControlRenderer))]
namespace EA.Indemnisation.Renderers
{
    public class RadialControlRenderer : ViewRenderer
    {
        protected override void OnDraw(Android.Graphics.Canvas canvas)
        {
            base.OnDraw(canvas);

            SetContentView(Resource.Layout.Radial); // How can I include my view as component into the form?

            var bigRadialProgress = FindViewById<RadialProgressView>(Resource.Id.bigProgress);
            var smallRadialProgress = FindViewById<RadialProgressView>(Resource.Id.smallProgress);
            var tinyRadialProgress = FindViewById<RadialProgressView>(Resource.Id.tinyProgress);
        }
    }
}

Это не помогло мне, потому что я не могу получить представление Android, взаимодействовать с ним и включить его в свою форму.

Я также посмотрел, как преобразовать Android.Views.View в Xamarin.Forms.View, но не могу найти способ сделать это.

Как можно интегрировать настраиваемый элемент управления в приложение Xamarin Forms?


person glautrou    schedule 23.09.2014    source источник


Ответы (1)


Вы начали в правильном направлении. Переопределите OnElementChanged, так как вы должны создать свой вид Android.

Что-то вроде:

protected overrie void OnElementChanged(ElementChangedEventArgs<RadialControl> e)
{
   if (Control == null) {
      YourView yourView = new YourView(base.Context);
      SetNativeControl(yourView );
   }
   // update and/or bind properties & events
    ....
}

Кроме того, чтобы уловить изменения свойств RadialControl, вы должны переопределить OnElementPropertyChanged;

person Miha Markic    schedule 23.09.2014