当我旋转 android 模拟器以将方向更改为风景模式或肖像模式时,'OnSizeAllocated' 未被调用

'OnSizeAllocated' is not being called when I rotate the android emulator to change the orientation to Landscape mode or Potrait mode

我想在设备方向改变时更改页面布局。但是为此,我首先需要在方向发生变化时得到通知。

我使用了 Page 的 'SizeChanged' 事件,当我在 ios 模拟器中旋转屏幕时它工作正常。但是 android 模拟器不要求这样做。

我也试过使用 OnSizeAllocated 方法,android 模拟器也没有调用它,但在 ios 模拟器上运行良好。

public LoginPage()    
{
  InitializeComponent();
}

protected override void OnSizeAllocated(double width,double height)
{
  base.OnSizeAllocated(width,height); 
  //
  //
}

这是我正在使用的模拟器:-

OnSizeAllocated() 应该调用多次。但它只会在应用程序启动时被调用一次(对于 android 模拟器)。

如何让它工作或有任何其他方式在模拟器方向改变时得到通知?

表单的 OnSizeAllocated 事件耦合到 Android Activity 的 OnConfigurationChanged.

因此,如果 OnConfigurationChanged 未被调用,则可能是以下三种情况中的任何一种:

  1. 你的设备|模拟器设置为auto-rotate了吗?拉下快速设置并确保旋转已启用。

  1. 您从 Activity 的属性中删除了 ConfigChanges.Orientation

MainActivity.cs:

[Activity(Label ~~~~~, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
  1. 您正在强制您的 Android 应用程序/activity 进入单一方向(通过清单、属性 and/or 本机 Android 代码)

我没有更改代码中的任何内容,也没有新的 xamarin 更新,但今天当我尝试这两种方法时都工作正常。

所以对我来说,我想重新启动 Visual studio、清理和构建项目使其工作。