Dep*_*hie 6 android xamarin.forms
我有一个 Xamarin Forms ContentView
,其 UI 在 XAML 中定义。当使用某个自定义渲染器时,应动态添加此视图到应用程序的根视图。
对于 iOS,这工作得很好,但在 Android 上,我没有得到像 XAML 中定义的正确的 UI。只是得到 1 个大矩形,没有其他东西。
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;
}
Run Code Online (Sandbox Code Playgroud)
然后在自定义渲染器中
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);
Run Code Online (Sandbox Code Playgroud)
所以这没关系!现在安卓
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;
}
Run Code Online (Sandbox Code Playgroud)
并在自定义渲染器中
var rect = new Rectangle(0, 0, 250, 55);
_overlayView = Helpers.ConvertFormsToNative(new OverlayTabView(), rect);
((ViewGroup)CurrentView.Parent).AddView(_overlayView);
Run Code Online (Sandbox Code Playgroud)
当我调试时,这确实创建了正确的控件,但是当它被添加到 UI 时,我只得到 1 个大的空矩形。
不确定问题出在哪里,所以如果有人能给我指出这个原则的一些基本例子,那就太好了。这样我就可以根据自己的需要进行定制,因为 XAML ContentView 中也包含使用自定义渲染器本身的控件。现在,只需在常规 ContentPage 中使用此 ContentView 在两个平台上都可以正常工作。
归档时间: |
|
查看次数: |
1111 次 |
最近记录: |