ここで説明されている 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
そして、それは自動的に設定されません(使用されている場所を確認すると、常に「なし」に設定されています)。回転?
関連するメモとして、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 コード (結果が使用される場所) で設定した場合は問題ありません (ハンドラーが実際に呼び出されることはないようですが)。なぜこれが当てはまるのか、誰にもわかりますか?