将Xamarin Forms视图注入Android View

时间:2019-01-24 12:09:14

标签: android xamarin.forms

我有一个Xamarin表单ContentView,其UI在XAML中定义。 使用特定的自定义渲染器时,应将此视图动态添加到应用的根视图。

对于iOS来说,它运行良好,但是在Android上,我无法获得XAML中定义的正确UI。只是得到一个大矩形而已。

iOS中使用的代码

public static UIView ConvertFormsToNative(Xamarin.Forms.View view, CGRect size)
{
    var renderer = Platform.CreateRenderer(view);
    renderer.NativeView.Frame = size;
    renderer.NativeView.AutoresizingMask = UIViewAutoresizing.All;
    renderer.NativeView.ContentMode = UIViewContentMode.ScaleToFill;
    renderer.Element.Layout(size.ToRectangle());
    var nativeView = renderer.NativeView;
    nativeView.SetNeedsLayout();

    return nativeView;
}

然后在自定义渲染器中

var rect = new CGRect(0, 0, 250, 55);
_overlayTabView = Helpers.ConvertFormsToNative(new OverlayTabView(), rect);
var result = UIScreen.MainScreen.Bounds;
var x = (result.Width / 2) - 125;
var y = (result.Height - (55 + 20));
_overlayTabView.Frame = new CGRect(x, y, 250, 55);
RootView.AddSubView(_overlayTabView);

所以没关系! 现在是Android

public static Android.Views.View ConvertFormsToNative(Xamarin.Forms.View view, Rectangle size)
{
    var renderer = Platform.CreateRendererWithContext(view, Android.App.Application.Context);
    var nativeView = renderer.View;
    renderer.Tracker.UpdateLayout();
    var layoutParams = new ViewGroup.LayoutParams((int)size.Width, (int)size.Height);
    nativeView.LayoutParameters = layoutParams;
    view.Layout(size);
    nativeView.Layout(0, 0, (int)view.WidthRequest, (int)view.HeightRequest);

    return nativeView;
}

在自定义渲染器中

var rect = new Rectangle(0, 0, 250, 55);
_overlayView = Helpers.ConvertFormsToNative(new OverlayTabView(), rect);
((ViewGroup)CurrentView.Parent).AddView(_overlayView);

这确实创建了我调试时似乎正确的控件,但是当将其添加到UI时,我只会得到1个大的空白矩形。

不确定问题出在哪里,所以如果有人可以向我指出该原理的一些基本示例,那也许会很好。这样,我就可以根据自己的需要进行调整,因为XAML ContentView中也包含使用自定义渲染器本身的控件。 现在,仅在常规ContentPage中使用此ContentView即可在两个平台上正常工作。

0 个答案:

没有答案