未验证 提交 d20bd4f2 编写于 作者: N Nick Randolph 提交者: GitHub

Merge pull request #11999 from unoplatform/dev/nr/androidactivate

feat: Delaying paint until Activation
#if XAMARIN_ANDROID
using System;
using Android.App;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Uno.Disposables;
......@@ -22,7 +23,9 @@ namespace Windows.UI.Xaml
{
public sealed partial class Window
{
private readonly ActivationPreDrawListener _preDrawListener = new ActivationPreDrawListener();
private Border _rootBorder;
private View _decor;
partial void InitPlatform()
{
......@@ -33,6 +36,13 @@ namespace Windows.UI.Xaml
+= RaiseNativeSizeChanged;
}
partial void InternalActivate()
{
_preDrawListener.IsActivated = true;
_decor?.ViewTreeObserver.RemoveOnPreDrawListener(_preDrawListener);
_decor = default;
}
internal Thickness Insets { get; set; }
internal int SystemUiVisibility { get; set; }
......@@ -53,6 +63,15 @@ namespace Windows.UI.Xaml
ApplicationActivity.Instance?.SetContentView(_rootVisual);
}
_rootBorder.Child = _content = value;
if (!_preDrawListener.IsActivated)
{
if (Uno.UI.ContextHelper.Current is Android.App.Activity activity)
{
_decor = activity.Window.DecorView;
_decor?.ViewTreeObserver.AddOnPreDrawListener(_preDrawListener);
}
}
}
internal UIElement MainContent => _rootVisual;
......@@ -334,6 +353,23 @@ namespace Windows.UI.Xaml
|| flags.HasFlag(WindowManagerFlags.LayoutNoLimits);
}
#endregion
private sealed class ActivationPreDrawListener : Java.Lang.Object, ViewTreeObserver.IOnPreDrawListener
{
public ActivationPreDrawListener()
{
}
public ActivationPreDrawListener(IntPtr handle, JniHandleOwnership transfer)
: base(handle, transfer)
{
}
public bool IsActivated { get; set; }
public bool OnPreDraw() => IsActivated;
}
}
}
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册