Riepilogo del capitolo 3. Dettagli della gestione del testo
Nota
Questo libro è stato pubblicato nella primavera del 2016, e non è stato aggiornato da allora. C'è molto nel libro che rimane prezioso, ma alcuni materiali sono obsoleti, e alcuni argomenti non sono più completamente corretti o completi.
Questo capitolo esplora la Label
visualizzazione in modo più approfondito, tra cui colore, tipi di carattere e formattazione.
Ritorno a capo dei paragrafi
Quando la Text
proprietà di Label
contiene testo lungo, Label
lo esegue automaticamente a capo in più righe, come illustrato dall'esempio baskervilles . È possibile incorporare codici Unicode come '\u2014' per i caratteri em-dash o C# come '\r' per interrompere una nuova riga.
Quando le HorizontalOptions
proprietà e VerticalOptions
di un Label
oggetto sono impostate su LayoutOptions.Fill
, le dimensioni complessive di Label
sono regolate dallo spazio reso disponibile dal contenitore. Si Label
dice che sia vincolato. La dimensione di Label
è la dimensione del relativo contenitore.
Quando le HorizontalOptions
proprietà e VerticalOptions
sono impostate su valori diversi da LayoutOptions.Fill
, le dimensioni di Label
sono regolate dallo spazio necessario per il rendering del testo, fino alle dimensioni che il contenitore rende disponibile per .Label
Si Label
dice che non sia vincolato e determina le proprie dimensioni.
(Nota: i termini vincolati e non vincolati potrebbero essere contro-intuitivi, perché una visualizzazione non vincolata è in genere più piccola di una visualizzazione vincolata. Inoltre, questi termini non vengono usati in modo coerente nei primi capitoli del libro.
Una vista, ad esempio , Label
può essere vincolata in una dimensione e non vincolata nell'altra. Un Label
oggetto eseguirà il wrapping del testo solo su più righe se è vincolato orizzontalmente.
Se un Label
oggetto è vincolato, potrebbe occupare molto più spazio del necessario per il testo. Il testo può essere posizionato all'interno dell'area complessiva di Label
. Impostare la HorizontalTextAlignment
proprietà su un membro dell'enumerazione TextAlignment
(Start
, Center
o End
) per controllare l'allineamento di tutte le righe del paragrafo. Il valore predefinito è Start
e allinea a sinistra il testo.
Impostare la VerticalTextAlignment
proprietà su un membro dell'enumerazione TextAlignment
per posizionare il testo nella parte superiore, centrale o inferiore dell'area occupata da Label
.
Impostare la LineBreakMode
proprietà su un membro dell'enumerazione LineBreakMode
(WordWrap
, CharacterWrap
, NoWrap
, MiddleTruncation
HeadTruncation
, o TailTruncation
) per controllare la modalità di troncamento delle più righe in un'interruzione di paragrafo.
Colori di testo e sfondo
Impostare le TextColor
proprietà e BackgroundColor
di Label
su Color
valori per controllare il colore del testo e dello sfondo.
Si BackgroundColor
applica allo sfondo dell'intera area occupata da Label
. A seconda delle HorizontalOptions
proprietà e VerticalOptions
, tale dimensione potrebbe essere notevolmente superiore all'area necessaria per visualizzare il testo. È possibile usare il colore per sperimentare i vari valori di , , e VerticalTextAlignment
per vedere come influiscono sulle dimensioni e sulla posizione dell'oggetto Label
e le dimensioni e la posizione del testo all'interno di Label
. HorizontalExeAlignment
VerticalOptions
HorizontalOptions
Struttura Color
La Color
struttura consente di specificare i colori come valori Red-Green-Blue (RGB) o valori Hue-Saturation-Luminosity (HSL) o con un nome di colore. È disponibile anche un canale Alfa per indicare la trasparenza.
Usare un Color
costruttore per specificare:
- ombreggiatura grigia
- un valore RGB
- un valore RGB con trasparenza
Gli argomenti sono double
valori compresi tra 0 e 1.
È anche possibile usare diversi metodi statici per creare Color
valori:
Color.FromRgb
per idouble
valori RGB da 0 a 1Color.FromRgb
per i valori RGB interi da 0 a 255Color.FromRgba
per idouble
valori RGB con trasparenzaColor.FromRgba
per valori RGB interi con trasparenzaColor.FromHsla
perdouble
i valori HSL con trasparenzaColor.FromUint
per unuint
valore calcolato come (B + 256 * (G + 256 * (R + 256 * A)))Color.FromHex
per unstring
formato di cifre esadecimali nel formato "#AARRGGBB" o "#RRGGBB" o "#ARGB" o "#RGB", dove ogni lettera corrisponde a una cifra esadecimale per i canali alfa, rosso, verde e blu. Questo metodo viene usato come principale per le conversioni di colori XAML, come illustrato nel capitolo 7, nel codice XAML e nel codice.
Una volta creato, un Color
valore non è modificabile. Le caratteristiche del colore possono essere ottenute dalle proprietà seguenti:
Si tratta di tutti i double
valori compresi tra 0 e 1.
Color
definisce anche 240 campi di sola lettura statici pubblici per i colori comuni. Al momento della scrittura del libro, erano disponibili solo 17 colori comuni.
Un altro campo di sola lettura statico pubblico definisce un colore con tutti i canali di colore impostati su zero:
Diversi metodi di istanza consentono di modificare un colore esistente per creare un nuovo colore:
Infine, due proprietà statiche di sola lettura definiscono un valore di colore speciale:
Color.Default
, tutti i canali impostati su -1Color.Accent
Color.Default
è progettato per applicare la combinazione di colori della piattaforma e di conseguenza ha un significato diverso in contesti diversi su piattaforme diverse. Per impostazione predefinita, le combinazioni di colori della piattaforma sono:
- iOS: testo scuro su uno sfondo chiaro
- Android: testo chiaro su uno sfondo scuro (nel libro) o testo scuro su uno sfondo chiaro (per Material Design tramite AppCompat nel ramo principale del repository di codice di esempio)
- UWP: testo scuro su uno sfondo chiaro
Il Color.Accent
valore restituisce un colore specifico della piattaforma (e talvolta selezionabile dall'utente) visibile su uno sfondo scuro o chiaro.
Modifica della combinazione di colori dell'applicazione
Le varie piattaforme hanno una combinazione di colori predefinita, come illustrato nell'elenco precedente.
Quando la destinazione è Android, è possibile passare a uno schema chiaro scuro specificando un tema chiaro nel file Android.Manifest.xml.
Per le piattaforme Windows, il tema colori viene normalmente selezionato dall'utente, ma puoi aggiungere un RequestedTheme
attributo impostato su Light
o Dark
nel file App.xaml della piattaforma. Per impostazione predefinita, il file App.xaml nel progetto UWP contiene un RequestedTheme
attributo impostato su Light
.
Dimensioni e attributi dei tipi di carattere
Impostare la FontFamily
proprietà di Label
su una stringa, ad esempio "Times Roman" per selezionare una famiglia di caratteri. Tuttavia, è necessario specificare una famiglia di caratteri supportata nella piattaforma specifica e le piattaforme non sono coerenti in questo senso.
Impostare la FontSize
proprietà di Label
su per double
specificare l'altezza approssimativa del tipo di carattere. Per altre informazioni sulla scelta intelligente delle dimensioni dei caratteri, vedere Capitolo 5, Gestione delle dimensioni.
In alternativa, è possibile ottenere una delle diverse dimensioni predefinite dei tipi di carattere dipendenti dalla piattaforma. Il metodo statico Device.GetNamedSize
e l'overload restituiscono entrambi un double
valore di dimensione del carattere appropriato per la piattaforma in base ai membri dell'enumerazione NamedSize
(Default
, Micro
, Small
Medium
, e Large
). Il valore restituito dal Medium
membro non è necessariamente uguale Default
a . L'esempio NamedFontSizes visualizza il testo con queste dimensioni denominate.
Impostare la FontAttributes
proprietà di Label
su un membro di questa FontAttributes
enumerazione, Bold
, Italic
o None
. È possibile combinare i Bold
membri e Italic
con l'operatore OR bit per bit C#.
Testo formattato
In tutti gli esempi finora, l'intero testo visualizzato da Label
è stato formattato in modo uniforme. Per variare la formattazione all'interno di una stringa di testo, non impostare la Text
proprietà di Label
. Impostare invece la FormattedText
proprietà su un oggetto di tipo FormattedString
.
FormattedString
dispone di una Spans
proprietà che è una raccolta di Span
oggetti . Ogni Span
oggetto ha le proprie Text
proprietà , FontFamily
, FontAttributes
FontSize
, ForegroundColor
, e BackgroundColor
.
L'esempio VariableFormattedText illustra l'uso della FormattedText
proprietà per una singola riga di testo e VariableFormattedParagraph illustra la tecnica per un intero paragrafo, come illustrato di seguito:
Il programma NamedFontSizes usa un singolo Label
oggetto e un FormattedString
oggetto per visualizzare tutte le dimensioni del carattere denominate per ogni piattaforma.