Xamarin.Forms - 检测方向和调整页面
Posted
技术标签:
【中文标题】Xamarin.Forms - 检测方向和调整页面【英文标题】:Xamarin.Forms - Detect orientation & adjust page 【发布时间】:2014-06-30 11:49:36 【问题描述】:在构建页面时,我想知道设备(android、ios 和 Windows Phone)的方向。该页面有一个包含 3 个列定义的网格,并且一旦方向更改为横向,就应该有 5 个列定义。
Grid grid = new Grid
HorizontalOptions = LayoutOptions.Fill,
VerticalOptions = LayoutOptions.Fill,
RowSpacing = 15,
ColumnSpacing = 15,
Padding = new Thickness(15),
ColumnDefinitions =
new ColumnDefinition Width = new GridLength(1, GridUnitType.Star) ,
new ColumnDefinition Width = new GridLength(1, GridUnitType.Star) ,
new ColumnDefinition Width = new GridLength(1, GridUnitType.Star)
;
for (int i = 0; i < 12; i++)
Image img = new Image()
Source = "ButtonBlue.png"
;
//if(DependencyService.Get<IDeviceInfo>().IsPortraitOriented())
//
grid.Children.Add(img, i % 3, i / 3);
//
//else
//
// grid.Children.Add(button, i % 5, i / 5);
//
this.Content = new ScrollView
Orientation = ScrollOrientation.Vertical,
Content = grid
;
所以我在这里添加了 12 张图片来测试我的代码。页面在纵向时看起来不错,如果设备是横向时,列之间的空间很大。
我也在尝试使用依赖注入来检索信息。 DependencyService 正在做他的工作,但我没有成功检索设备的方向...
【问题讨论】:
你会发现这个 git 链接很有帮助github.com/xamarin/monotouch-samples/tree/master/Rotation 【参考方案1】:在 xamarin.forms 中,您可以使用 MessageCenter 从 android 部分获取通知。 1.在共享项目中
public partial class MyPage : ContentPage
public MyPage ()
InitializeComponent ();
Stack = new StackLayout
Orientation = StackOrientation.Vertical,
;
Stack.Children.Add (new Button Text = "one" );
Stack.Children.Add (new Button Text = "two" );
Stack.Children.Add (new Button Text = "three" );
Content = Stack;
MessagingCenter.Subscribe<MyPage> (this, "Vertical", (sender) =>
this.Stack.Orientation = StackOrientation.Vertical;
this.ForceLayout();
);
MessagingCenter.Subscribe<MyPage> (this, "Horizontal", (sender) =>
this.Stack.Orientation = StackOrientation.Horizontal;
this.ForceLayout();
);
public StackLayout Stack;
2.在Android项目中
[Activity (Label = "XamFormOrientation.Android.Android", MainLauncher = true, ConfigurationChanges = global::Android.Content.PM.ConfigChanges.Orientation | global::Android.Content.PM.ConfigChanges.ScreenSize)]
public class MainActivity : AndroidActivity
protected override void OnCreate (Bundle bundle)
base.OnCreate (bundle);
Xamarin.Forms.Forms.Init (this, bundle);
SetPage (App.GetMainPage ());
public override void OnConfigurationChanged (global::Android.Content.Res.Configuration newConfig)
base.OnConfigurationChanged (newConfig);
if (newConfig.Orientation == global::Android.Content.Res.Orientation.Portrait)
MessagingCenter.Send<MyPage> (null, "Vertical");
else if (newConfig.Orientation == global::Android.Content.Res.Orientation.Landscape)
MessagingCenter.Send<MyPage> (null, "Horizontal");
【讨论】:
【参考方案2】:我解决了一个类似的问题,并在可能对您有帮助的好帖子上找到它(请参阅下面的超链接)。
在快捷方式中:通过
找出方向Page.Width < Page.Height
并在创建页面时在 ContentPage(或其他)的构造函数中使用此信息
http://www.sellsbrothers.com/Posts/Details/13740
【讨论】:
以上是关于Xamarin.Forms - 检测方向和调整页面的主要内容,如果未能解决你的问题,请参考以下文章
PageRenderer中的Xamarin.Forms UINavigationBar