|
|
@@ -4,9 +4,12 @@ using Android.Content;
|
|
|
using Android.Content.Res;
|
|
|
using Android.OS;
|
|
|
using Android.Runtime;
|
|
|
+using Android.Views;
|
|
|
using AndroidX.AppCompat.App;
|
|
|
using AndroidX.Lifecycle;
|
|
|
|
|
|
+using AndroidRect = Android.Graphics.Rect;
|
|
|
+
|
|
|
namespace Avalonia.Android
|
|
|
{
|
|
|
public abstract class AvaloniaMainActivity : AppCompatActivity, IActivityResultHandler
|
|
|
@@ -15,6 +18,7 @@ namespace Avalonia.Android
|
|
|
|
|
|
public Action<int, Result, Intent> ActivityResult { get; set; }
|
|
|
internal AvaloniaView View;
|
|
|
+ private GlobalLayoutListener _listener;
|
|
|
|
|
|
protected override void OnCreate(Bundle savedInstanceState)
|
|
|
{
|
|
|
@@ -32,6 +36,10 @@ namespace Avalonia.Android
|
|
|
base.OnCreate(savedInstanceState);
|
|
|
|
|
|
SetContentView(View);
|
|
|
+
|
|
|
+ _listener = new GlobalLayoutListener(View);
|
|
|
+
|
|
|
+ View.ViewTreeObserver?.AddOnGlobalLayoutListener(_listener);
|
|
|
}
|
|
|
|
|
|
public object Content
|
|
|
@@ -57,6 +65,8 @@ namespace Avalonia.Android
|
|
|
{
|
|
|
View.Content = null;
|
|
|
|
|
|
+ View.ViewTreeObserver?.RemoveOnGlobalLayoutListener(_listener);
|
|
|
+
|
|
|
base.OnDestroy();
|
|
|
}
|
|
|
|
|
|
@@ -66,5 +76,20 @@ namespace Avalonia.Android
|
|
|
|
|
|
ActivityResult?.Invoke(requestCode, resultCode, data);
|
|
|
}
|
|
|
+
|
|
|
+ class GlobalLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener
|
|
|
+ {
|
|
|
+ private AvaloniaView _view;
|
|
|
+
|
|
|
+ public GlobalLayoutListener(AvaloniaView view)
|
|
|
+ {
|
|
|
+ _view = view;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void OnGlobalLayout()
|
|
|
+ {
|
|
|
+ _view.TopLevelImpl?.Resize(_view.TopLevelImpl.ClientSize);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|