当我旋转android模拟器以将方向更改为横向模式或Potrait模式时,不会调用“ OnSizeAllocated”

时间:2019-05-16 15:57:17

标签: c# visual-studio xamarin xamarin.forms android-emulator

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

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

我也尝试过使用OnSizeAllocated方法,但是它对于Android模拟器来说并没有被调用,但是对于ios模拟器却可以正常工作。

public LoginPage()    
{
  InitializeComponent();
}

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

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

enter image description here

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

当模拟器方向改变时,我该如何使其工作或还有其他方法来获得通知?

2 个答案:

答案 0 :(得分:2)

Forms的OnSizeAllocated事件与Android Activity的OnConfigurationChanged耦合。

因此,如果未调用OnConfigurationChanged,则可能是以下三件事之一:

  1. 您的设备|模拟器设置为自动旋转吗?下拉快速设置,并确保启用旋转。

enter image description here

  1. 您从活动属性中删除了ConfigChanges.Orientation

MainActivity.cs:

[Activity(Label ~~~~~, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
  1. 您正在将Android应用程序/活动(通过清单,属性和/或本机Android代码)推向一个单一的方向

答案 1 :(得分:0)

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

所以对我来说,我猜想是重新启动Visual Studio,清理和构建项目才能使其正常工作。