2015-08-25 12 views
5

Come distribuire uniformemente 4 controlli all'interno di uno StackLayout orizzontale di Xamarin Form. Ho un aspetto decente su un iPhone 4S, ma non adatto a un iPhone 6 o iPad. Il layout di stack orizzontale è l'elemento di elenco in un controllo ListView. Ho provato un layout relativo e una griglia a 1 riga. Ma quello che ho sembra migliore (sul 4S). Grazie.Come distribuire uniformemente 4 controlli all'interno di Xamarin Forms StackLayout orizzontale

Ho un pulsante, un'etichetta, un'etichetta e un pulsante, in questo ordine.

 stackLayout = new StackLayout { 
      Orientation = StackOrientation.Horizontal, 
      HorizontalOptions = LayoutOptions.Center 
     }; 
     deleteButton.Image = "minus.png"; 
     deleteButton.HorizontalOptions = LayoutOptions.Start; 

     //label text width may vary from 4 to 16 characters 
     displayLabel.SetBinding(Label.TextProperty, "Text"); 
     displayLabel.HorizontalOptions = LayoutOptions.Center; 
     displayLabel.WidthRequest = 125; 

     //label text is always 8 characters 
     displayLabel2.SetBinding(Label.TextProperty, "Text2"); 
     displayLabel2.HorizontalOptions = LayoutOptions.Center; 

     button2.Image = "plus.png"; 
     button2.HorizontalOptions = LayoutOptions.EndAndExpand; 

     stackLayout.Children.Add(deleteButton); 
     stackLayout.Children.Add(displayLabel); 
     stackLayout.Children.Add(displayLabel2); 
     stackLayout.Children.Add(button2); 
+0

Solo una domanda: fa questo assolutamente bisogno di essere uno stackLayout? In caso contrario, potresti prendere in considerazione una griglia che possa gestirlo abbastanza facilmente per te. – Demitrian

+0

Ho provato una griglia di 1 riga con 4 colonne ma per qualche motivo, i 4 elementi non si allineavano correttamente. –

risposta

13

Utilizzando stackLayout:

using Xamarin.Forms; 

var label1 = new Label() { 
    Text = "label1", 
    HorizontalOptions = LayoutOptions.FillAndExpand, //OR CenterAndExpand 
}; 

var label2 = new Label() { 
    Text = "label2", 
    HorizontalOptions = LayoutOptions.FillAndExpand, //OR CenterAndExpand 
}; 

var label3 = new Label() { 
    Text = "label3", 
    HorizontalOptions = LayoutOptions.FillAndExpand, //OR CenterAndExpand 
}; 

var label4 = new Label() { 
    Text = "label4", 
    HorizontalOptions = LayoutOptions.FillAndExpand, //OR CenterAndExpand 
}; 

var stackLayout = new StackLayout 
{ 
    Orientation = StackOrientation.Horizontal, 
    HorizontalOptions = LayoutOptions.FillAndExpand, 
    Children = { 
     label1, 
     label2, 
     label3, 
     label4, 
    } 
}; 

RootPage.Children.Add(new ContentPage { 
    Padding = 10, 
    Content = stackLayout 
}); 

Usando griglia:

using Xamarin.Forms; 

    var label1 = new Label() { 
    Text = "label1", 
}; 

var label2 = new Label() { 
    Text = "label2", 
}; 

var label3 = new Label() { 
    Text = "label3", 
}; 

var label4 = new Label() { 
    Text = "label4", 
}; 

var gridLayout = new Grid 
{ 
    HorizontalOptions = LayoutOptions.FillAndExpand, 
    ColumnDefinitions = new ColumnDefinitionCollection() { 
     new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }, 
     new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }, 
     new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }, 
     new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }, 
    }, 
    RowDefinitions = new RowDefinitionCollection() { 
     new RowDefinition() { Height = GridLength.Auto } 
    } 
}; 

gridLayout.Children.Add(label1, 0, 0); 
gridLayout.Children.Add(label2, 1, 0); 
gridLayout.Children.Add(label3, 2, 0); 
gridLayout.Children.Add(label4, 3, 0); 

RootPage.Children.Add(new ContentPage { 
    Padding = 10, 
    Content = gridLayout 
}); 
+0

Grazie, Daniel. FillAndExpand era la chiave per utilizzare un layout di stack. Dovevo dare al mio secondo oggetto una richiesta di larghezza (dato che la larghezza varia) per mantenere tutte e quattro le colonne allineate da una riga all'altra. Proverò a breve la versione di CenterAndExpand e le implementazioni della griglia. –

+0

Nessun problema. Puoi leggere ulteriori informazioni su LayoutOptions qui: http://stackoverflow.com/questions/25338533/what-is-the-difference-between-xamarin-forms-layoutoptions-especially-fill-and –

+0

Domanda di follow-up rapido. Il primo elemento è dinamico, in quanto viene visualizzato solo a volte, quando non viene visualizzato il primo elemento efficace (label2) sembra essere bloccato all'estremità sinistra della riga, come posso aggiungere un padding o spazio a sinistra di label2? –

Problemi correlati