在Xamarin.Android中重新加载XML布局以更改方向?

问题描述 投票:1回答:1

我正在尝试为我的Android应用在Xamarin中为纵向和横向模式创建两种不同的布局。

我已经为纵向模式创建了一个布局文件夹,为横向创建了布局图。当我打开特定页面时,将根据设备的方向加载正确的布局。但是,当我在打开页面时更改方向时,布局不会更改,只会旋转。我尝试覆盖mainActivity中的OnConfigurationChanged,但是我不确定如何仅为所需页面调用和加载布局。

public override void OnConfigurationChanged (Android.Content.Res.Configuration newConfig)
          {
            base.OnConfigurationChanged (newConfig);

            if (newConfig.Orientation == Android.Content.Res.Orientation.Portrait) {
                LayoutInflater li = (LayoutInflater)this.GetSystemService(Context.LayoutInflaterService);
                SetContentView(Resource.Layout.myLayout);
            }
            else if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape) {
                SetContentView(Resource.Layout.myLayout);
            }
        }

此代码在方向更改时加载正确的布局,但是在方向更改时会被调用,并且发生在与该布局关联的所需页面之外。

c# android xamarin xamarin.forms xamarin.android
1个回答
0
投票

Xamarin.Forms中,您有诸如LayoutChangedSizeChanged之类的事件,只要PageLayout更改(包括创建页面时,以及当方向改变时,因此可能是一个不错的地方。

在下面@ jgoldberger-MSFT建议的文章中,Xamarin的团队建议使用SizeChanged(阅读文章以获取更多详细信息!)

Xamarin.Forms不提供任何本地事件来通知您的应用共享代码的方向更改。但是,当页面的宽度或高度发生更改时,页面的SizeChanged事件就会触发。

[Xamarin.Forms中的ContentPage内,您可以简单地设置(超级基本示例):

public MainPage() { InitializeComponent(); SizeChanged += (s,a) => { if (this.Width > this.Height ) // or any flag that you use to check the current orientation! this.BackgroundColor = Color.Black; else this.BackgroundColor = Color.White; }; }

更新:

Android

Page Renderer中,您仍然可以使用类似的LayoutChange Handlerclass Class1 : PageRenderer { public Class1(Context context) : base(context) { LayoutChange += (s, a) => { }; } }
希望这很有用...
© www.soinside.com 2019 - 2024. All rights reserved.