Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Xamarin表单视图注入Android视图_Android_Xamarin.forms - Fatal编程技术网

将Xamarin表单视图注入Android视图

将Xamarin表单视图注入Android视图,android,xamarin.forms,Android,Xamarin.forms,我有一个Xamarin表单ContentView,它的UI在XAML中定义。 当使用某个自定义渲染器时,应将此视图动态添加到应用程序的根视图中 对于iOS来说,这是完美的,但在Android上,我并没有像XAML中定义的那样获得正确的UI。只得到一个大矩形,其他什么都没有 iOS中使用的代码 public static UIView ConvertFormsToNative(Xamarin.Forms.View view, CGRect size) { var renderer = Pl

我有一个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);
var rect = new Rectangle(0, 0, 250, 55);
_overlayView = Helpers.ConvertFormsToNative(new OverlayTabView(), rect);
((ViewGroup)CurrentView.Parent).AddView(_overlayView);
所以这没关系! 现在安卓

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 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);
var rect = new Rectangle(0, 0, 250, 55);
_overlayView = Helpers.ConvertFormsToNative(new OverlayTabView(), rect);
((ViewGroup)CurrentView.Parent).AddView(_overlayView);
当我调试时,这确实创建了正确的控件,但是当它被添加到UI时,我只得到一个大的空矩形

我不知道问题出在哪里,所以如果有人能给我指出这个原则的一些基本例子,那就太好了。这样我就可以根据自己的需要来定制,因为XAML ContentView中也有使用自定义渲染器的控件。
现在,在常规ContentPage中使用此ContentView在这两种平台上都可以正常工作。

您检查过这些存储库吗?您也可以阅读这些帖子或官方文档。。。但这里的情况有点不同(或者我没有正确阅读文档?)。我试图添加一个子部分,而不是改变整个页面。这意味着首先,源是ContentView而不是页面,目标不是完整的片段。但我需要注入到现有的子视图中。可能这种技术也可以用于我的案例,但我无法使其工作。因此,斯塔克问题。有人举过一个好例子吗?您是否尝试将上下文名称空间更改为
var renderer=Platform.createrenderwithcontext(view,Android.Content.Context)?方法参数上的矩形也是
Xamarin.Forms.Rectangle
System.Drawing.Rectangle