Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Xamarin Views

Conoscere la classe View di Xamarin.Forms, che permette di definire diversi elementi grafici che compongono la UI, tra cui i layout e i controlli.
Conoscere la classe View di Xamarin.Forms, che permette di definire diversi elementi grafici che compongono la UI, tra cui i layout e i controlli.
Link copiato negli appunti

In questa lezione prenderemo confidenza con la classe View di Xamarin.Forms, che permette di definire diversi elementi grafici che compongono la UI, tra cui i layout e i controlli.

Analizziamo brevemente i principali oggetti View con cui ci si trova più spesso a lavorare nella realizzazione di un’app:

Tipo Descrizione
ActivityIndicator È un elemento animato che indica che un’operazione è in corso
Button Bottone con cui interagire
DatePicker Permette di selezionare la data
Editor Campo modificabile per la scrittura di una o più linee di testo
Entry Campo modificabile per inserire un contenuto alfanumerico
Image È una View che gestisce un’immagine
Label Stringa (a linea singola o multilinea) da visualizzare
ProgressBar Indica l’avanzamento di un’operazione
Stepper Permette di incrementare o decrementare un valore in un range definito

A questi elementi si aggiungono le ListView e le TableView, che fungono da contenitore di View e Cells, offrendo un insieme di caratteristiche diverse dai layout introdotti nella precedente lezione. È possibile, inoltre, implementare una WebView per la visualizzazione di pagine web o dei loro contenuti, argomenti che tratteremo nelle prossime lezioni.

View e StackLayout in C#

Prendiamo confidenza con le View e definiamo una nuova Page composta da diversi elementi:

Figura 43. Struttura della Page (click per ingrandire)

Struttura della Page

Creiamo una nuova ContentPage da aggiungere al progetto portable, e chiamiamola StackLayoutViewsExample. Generata la pagina, aggiorniamo il costruttore e definiamo una Label come titolo della pagina.

Label title = new Label
		{
			Text = "Views Demo",
			TextColor = Color.Green,
			FontSize = 20,
			FontAttributes = FontAttributes.Bold
			HorizontalOptions = LayoutOptions.Center
		};

In questo modo abbiamo definito una nuova Label, il suo contenuto, il suo aspetto (colore, dimensione, eccetera) e la sua posizione all’interno del layout. Creiamo ora il bottone che visualizzerà un Alert, e che sarà contenuto nello StackLayout verticale schematizzato nella figura precedente:

Button button = new Button
		{
			Text = "Display Alert",
			Font = Font.SystemFontOfSize(NamedSize.Large),
			BorderWidth = 1,
		};
		button.Clicked += OnButtonClicked;

Attraverso le proprietà Text e Font si può impostare il testo e il font, mentre il BorderWidth e la proprietà Clicked servono ad indicare la dimensione del bordo e l’azione associata all'evento di click. In particolare, il metodo onButtonClicked è definito come segue:

void OnButtonClicked(object sender, EventArgs e)
		{
			String titleAlert = "hello Xamarin!";
			String content = "That's an alert";
			String cancel = "ok";
			DisplayAlert(titleAlert,content,cancel);
		}

Cliccando il bottone, viene richiamato il metodo DisplayAlert, che visualizza un popup contenente un titolo, un contenuto e un bottone per chiuderlo.

Definiamo ora lo StackLayout che conterrà gli elementi scelti:

StackLayout stckltVertical = new StackLayout
		{
			Spacing = 20,
			VerticalOptions = LayoutOptions.Start,
			Children =
			{
				new Entry
				{
					Keyboard = Keyboard.Text,
					Placeholder = "Name"
				},
				new Entry
				{
					Placeholder = "Enter password",
					IsPassword = true
				},
				new DatePicker
				{
					Format = "D",
					BackgroundColor = Color.Blue
				},
				new Editor
				{
					FontSize = 15,
					HeightRequest = 100,
					TextColor = Color.Black,
					BackgroundColor = Color.White
				},
				button
		   }
		};

La proprietà Spacing inserisce una spaziatura uguale per tutti gli elementi aggiunti nel layout attraverso la proprietà Children, che permette anche di definire nuovi elementi. Nello snippet precedente, l'abbiamo usata per le seguenti proprietà:

Proprietà Descrizione
Placeholder Serve come suggerimento per l’utente
Keyboard Specifica il tipo di input
IsPassword Valore booleano che serve per nascondere i caratteri digitati

Per il DatePicker è stato definito il tipo di formato e un colore per lo sfondo. Per l’Editor, invece, si è impostata la dimensione del font, la grandezza del box che conterrà il testo da visualizzare, il colore del testo e dello sfondo attraverso la classe Color.

Definiamo ora il secondo StackLayout con orientamento orizzontale, ma stavolta creiamo prima lo Stepper e la Label:

Stepper stepper = new Stepper
		{
			Minimum = 0,
			Maximum = 10,
			Increment = 0.1,
			HorizontalOptions = LayoutOptions.CenterAndExpand,
		};
		stepper.ValueChanged += OnStepperValueChanged;
		stppLabel = new Label
		{
			Text = "Value = 0 ",
			FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
			HorizontalOptions = LayoutOptions.Start
		};
		StackLayout stckltHorz1 = new StackLayout();
		stckltHorz1.Orientation = StackOrientation.Horizontal;
		stckltHorz1.Children.Add(stppLabel);
		stckltHorz1.Children.Add(stepper);

In questa implementazione gli elementi del layout sono stati prima definiti e poi aggiunti. Inoltre, il layout è stato impostato in modo che i figli siano disposti orizzontalmente tramite la proprietà Orientation. Per lo Stepper si è definito il range di valori possibili e l’incremento che si ha ad ogni click, mentre la Label è stata definita a livello di classe affinché sia visibile anche ad altri metodi come OnStepperValueChanged, metodo che si occupa di aggiornare il testo della label:

void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
		{
			sldLabel.Text = String.Format("Value = {0:F1}", e.NewValue);
		}

Infine, creiamo un footer per la nostra pagina utilizzando il logo di HTML.it

Image footer = new Image
		{
			Source = ImageSource.FromUri(new Uri("https://www.html.it/wp-content/themes/www.html.it/images/logo.png")),
			VerticalOptions = LayoutOptions.EndAndExpand
		};

Tramite il metodo FromURI è stata impostata l’immagine da visualizzare che occuperà la parte inferiore del layout. Non ci resta che aggiungere questi elementi all’interno di un nuovo StackLayout padre, impostato come contenuto della Page:

Content = new StackLayout
		{
			Spacing = 20,
			Children =
			{
				title,
				stckltVertical,
				stckltHorz1,
				footer,
			}
		};

Compiliamo ed eseguiamo l’app sulle varie piattaforme, ottenendo il risultato seguente.

Figura 44. Risultato della compilazione su diverse piattaforme. (click per ingrandire)

Risultato della compilazione su diverse piattaforme

In presenza di un numero cospicuo di elementi da inserire all’interno dello StackLayout e di uno schermo dalle dimensioni ridotte, non sempre è possibile visualizzare tutti gli elementi (specie se il dispositivo è in Landscape). Una possibile soluzione è l’utilizzo della ScrollView, contenente lo StackLayout padre, che sarà impostata come contenuto della pagina.

Per testare questo aspetto, duplichiamo uno degli elementi creati e aggiorniamo l’ultima porzione di codice come segue:

StackLayout father = new StackLayout
		{
			Spacing = 20,
			Children =
			{
				title,
				stckltVertical,
				stckltHorz1,
				footer,
			}
		};
		Content = new ScrollView
		{
			Content = father,
		}

Eseguiamo l’app su tutti e tre i dispositivi, ottenendo il risultato desiderato.

Figura 45. (click per ingrandire)


Ti consigliamo anche