2014-06-30 7 views
5

Ich möchte die Ausrichtung des Geräts (Android, iOS & Windows Phone) zu der Zeit, die ich meine Seite aufbauen. Die Seite hat ein Raster mit 3 Spaltendefinitionen und sollte 5 Spaltendefinitionen haben, sobald die Ausrichtung in Querformat geändert wurde.Xamarin.Forms - Ausrichtung erkennen und Seite anpassen

 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 
     }; 

Also hier habe ich 12 Bilder hinzugefügt, um meinen Code zu testen. Die Seite sieht im Hochformat gut aus und hat viel Platz zwischen den Spalten, wenn das Gerät im Querformat ausgerichtet ist.

Ich versuche auch, Abhängigkeitsinjektion zu verwenden, um die Informationen abzurufen. Der DependencyService macht seine Arbeit, aber ich habe keinen Erfolg beim Abrufen der Ausrichtung des Geräts ...

+0

Erstellen finden Sie diese git Link hilfreich https://github.com/xamarin/monotouch-samples/tree/master/Rotation –

+0

Ich werde es einen Blick geben. – Bart

Antwort

1

In Xamarin.forms können Sie Benachrichtigung von Android-Teil mithilfe von MessageCenter erhalten. 1.In Geteilt Projekt

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.In Android Projekt

[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

löste ich ein ähnliches Problem und es auf großen Beitrag finden, die vielleicht für Sie hilfreich (Hyper-Link siehe unten).

In Abkürzung Orientierung, indem du

Page.Width < Page.Height 

und diese Informationen in Konstruktor von Content (oder andere), wenn Seite

http://www.sellsbrothers.com/Posts/Details/13740