我正在尝试使用此处详述的 XLabs 方法确定屏幕何时旋转(在 Android 中)如何在 Xamarin Forms 中处理屏幕旋转/方向?我遇到了麻烦。
我覆盖MainActivity中的OnConfigurationChanged方法
public override void OnConfigurationChanged (Android.Content.Res.Configuration newConfig)
{
base.OnConfigurationChanged (newConfig);
var xapp = Resolver.Resolve<IXFormsApp> ();
if (xapp == null)
return;
switch (newConfig.Orientation) {
case Android.Content.Res.Orientation.Landscape:
xapp.Orientation = XLabs.Enums.Orientation.Landscape;
break;
case Android.Content.Res.Orientation.Portrait:
//xapp.Orientation = XLabs.Enums.Orientation.Portrait;
break;
default:
break;
}
}
我在使用 IXFormsApp 中的 Orientation 变量时遇到问题,即 xapp.Orientation。XLabs 文档将其列为“受保护集”,编译器也是如此:
MainActivity.cs(109,5,109,21): error CS0200: Property or indexer 'XLabs.Platform.Mvvm.IXFormsApp.Orientation' cannot be assigned to -- it is read only
并且它不会自动设置(当我检查它的使用位置时,它总是设置为“无”),所以我想知道如何使用它,实际上,如何使用 XLabs/IXFormsApp 来确定回转?
在相关的说明中,我还尝试设置 Rotation 处理程序(不知道为什么,但我想我会试一试),结果不寻常。
xapp.Rotation += (sender, args) =>
{
switch (args.Value)
{
case XLabs.Enums.Orientation.Landscape:
//xapp.Orientation = XLabs.Enums.Orientation.Landscape;
...
break;
case XLabs.Enums.Orientation.Portrait:
...
break;
default:
break;
}
};
如果我尝试使用 Android 代码,则会收到以下错误:
MainActivity.cs(60,4,60,22): error CS0019: Operator '+=' cannot be applied to operands of type 'System.EventHandler<XLabs.EventArgs<XLabs.Enums.Orientation>>' and 'lambda expression'
但是,如果我在 Forms 代码(使用结果的地方)中设置它,那很好(尽管处理程序似乎从未真正被调用过)。有谁知道为什么会这样?