Resumo do Capítulo 3. Aprofundamento no texto
Observação
Este livro foi publicado na primavera de 2016 e não foi atualizado desde então. Há muito no livro que permanece valioso, mas parte do material está desatualizado e alguns tópicos não estão mais totalmente corretos ou completos.
Este capítulo explora a Label
visualização com mais profundidade, incluindo cores, fontes e formatação.
Quebrando parágrafos
Quando a Text
propriedade de Label
contém texto longo, automaticamente o encapsula em várias linhas, Label
conforme demonstrado pelo exemplo de Baskervilles . Você pode incorporar códigos Unicode como '\u2014' para o travessão ou caracteres C# como '\r' para quebrar em uma nova linha.
Quando as HorizontalOptions
propriedades e VerticalOptions
de a Label
são definidas como LayoutOptions.Fill
, o tamanho geral do Label
é regido pelo espaço que seu contêiner disponibiliza. Diz-se Label
que o é restrito. O tamanho do Label
é o tamanho de seu recipiente.
Quando as HorizontalOptions
propriedades and VerticalOptions
são definidas como valores diferentes de LayoutOptions.Fill
, o tamanho do Label
é controlado pelo espaço necessário para renderizar o texto, até o tamanho que seu contêiner disponibiliza para o Label
. Diz-se Label
que não tem restrições e determina seu próprio tamanho.
(Observação: os termos restrito e irrestrito podem ser contra-intuitivos, porque uma exibição irrestrita geralmente é menor do que uma exibição restrita. Além disso, esses termos não são usados de forma consistente nos primeiros capítulos do livro.)
Uma visão como a Label
pode ser restrita em uma dimensão e irrestrita na outra. A Label
só quebrará o texto em várias linhas se ele for restrito horizontalmente.
Se a Label
for restrito, ele pode ocupar consideravelmente mais espaço do que o necessário para o texto. O texto pode ser posicionado dentro da área geral do Label
. Defina a HorizontalTextAlignment
propriedade como um membro da TextAlignment
enumeração (Start
, Center
, ou End
) para controlar o alinhamento de todas as linhas do parágrafo. O padrão é Start
e alinha o texto à esquerda.
Defina a VerticalTextAlignment
propriedade como um membro da TextAlignment
enumeração para posicionar o texto na parte superior, central ou inferior da área ocupada pelo Label
.
Defina a LineBreakMode
propriedade como um membro da LineBreakMode
enumeração (WordWrap
, CharacterWrap
, NoWrap
, HeadTruncation
, MiddleTruncation
, ou TailTruncation
) para controlar como as várias linhas em um parágrafo são quebradas ou truncadas.
Cores de texto e plano de fundo
Defina as TextColor
propriedades e BackgroundColor
de Label
para Color
valores para controlar a cor do texto e do plano de fundo.
O BackgroundColor
aplica-se ao plano de fundo de toda a área ocupada Label
pelo . Dependendo das HorizontalOptions
propriedades e VerticalOptions
, esse tamanho pode ser consideravelmente maior do que a área necessária para exibir o texto. Você pode usar a cor para experimentar vários valores de , , , e VerticalTextAlignment
para ver como eles afetam o tamanho e a posição do Label
, e o tamanho e a posição do texto dentro do Label
. HorizontalExeAlignment
VerticalOptions
HorizontalOptions
A estrutura de cores
A Color
estrutura permite especificar cores como valores de vermelho-verde-azul (RGB) ou valores de matiz-saturação-luminosidade (HSL) ou com um nome de cor. Um canal Alfa também está disponível para indicar transparência.
Use um Color
construtor para especificar:
Os argumentos são double
valores que variam de 0 a 1.
Você também pode usar vários métodos estáticos para criar Color
valores:
Color.FromRgb
paradouble
valores RGB de 0 a 1Color.FromRgb
para valores RGB inteiros de 0 a 255Color.FromRgba
paradouble
valores RGB com transparênciaColor.FromRgba
para valores RGB inteiros com transparênciaColor.FromHsla
paradouble
valores HSL com transparênciaColor.FromUint
para umuint
valor calculado como (B + 256 * (G + 256 * (R + 256 * A)))Color.FromHex
para umstring
formato de dígitos hexadecimais no formato "#AARRGGBB" ou "#RRGGBB" ou "#ARGB" ou "#RGB", em que cada letra corresponde a um dígito hexadecimal para os canais alfa, vermelho, verde e azul. Esse método é usado principalmente para conversões de cores XAML, conforme discutido no Capítulo 7, XAML vs. código.
Depois de criado, um Color
valor é imutável. As características da cor podem ser obtidas a partir das seguintes propriedades:
Todos esses double
são valores que variam de 0 a 1.
Color
Também define 240 campos públicos estáticos somente leitura para cores comuns. Na época em que o livro foi escrito, apenas 17 cores comuns estavam disponíveis.
Outro campo somente leitura estático público define uma cor com todos os canais de cores definidos como zero:
Vários métodos de instância permitem modificar uma cor existente para criar uma nova cor:
Por fim, duas propriedades estáticas somente leitura definem um valor de cor especial:
Color.Default
, todos os canais definidos como –1Color.Accent
Color.Default
destina-se a impor o esquema de cores da plataforma e, consequentemente, tem um significado diferente em diferentes contextos em diferentes plataformas. Por padrão, os esquemas de cores da plataforma são:
- iOS: texto escuro em um fundo claro
- Android: texto claro em um plano de fundo escuro (no livro) ou texto escuro em um plano de fundo claro (para Material Design via AppCompat na ramificação principal do repositório de código de amostra)
- UWP: texto escuro em um plano de fundo claro
O Color.Accent
valor resulta em uma cor específica da plataforma (e às vezes selecionável pelo usuário) que é visível em um plano de fundo escuro ou claro.
Alterando o esquema de cores do aplicativo
As várias plataformas têm um esquema de cores padrão, conforme mostrado na lista acima.
Ao direcionar o Android, é possível alternar para um esquema de escuro sobre claro especificando um tema claro no arquivo Android.Manifest.xml.
Para as plataformas Windows, o tema de cores normalmente é selecionado pelo usuário, mas você pode adicionar um RequestedTheme
conjunto de atributos para ou Dark
Light
no arquivo App.xaml da plataforma. Por padrão, o arquivo App.xaml no projeto UWP contém um RequestedTheme
atributo definido como Light
.
Tamanhos e atributos de fonte
Defina a FontFamily
propriedade de como uma cadeia de caracteres como "Times Roman" para selecionar uma família de Label
fontes. No entanto, você precisa especificar uma família de fontes com suporte na plataforma específica, e as plataformas são inconsistentes a esse respeito.
Defina a FontSize
propriedade de Label
como a double
para especificar a altura aproximada da fonte. Consulte o Capítulo 5, "Lidando com tamanhos", para obter mais detalhes sobre como escolher tamanhos de fonte de forma inteligente.
Como alternativa, você pode obter um dos vários tamanhos de fonte predefinidos dependentes da plataforma. O método estático Device.GetNamedSize
e a sobrecarga retornam um double
valor de tamanho de fonte apropriado para a plataforma com base nos membros da NamedSize
enumeração (Default
, Micro
, Small
, Medium
e Large
). O valor retornado do Medium
membro não é necessariamente o mesmo que Default
. O exemplo NamedFontSizes exibe texto com esses tamanhos nomeados.
Defina a FontAttributes
propriedade de Label
como um membro dessas FontAttributes
enumerações, Bold
, Italic
, ou None
. Você pode combinar os Bold
membros and Italic
com o operador OR bit a bit do C#.
Texto formatado
Em todos os exemplos até agora, todo o texto exibido pelo Label
foi formatado uniformemente. Para variar a formatação em uma cadeia de caracteres de texto, não defina a Text
propriedade .Label
Em vez disso, defina a FormattedText
propriedade como um objeto do tipo FormattedString
.
FormattedString
tem uma Spans
propriedade que é uma coleção de Span
objetos. Cada Span
objeto tem suas próprias Text
propriedades , FontFamily
, FontSize
, ForegroundColor
FontAttributes
, , e BackgroundColor
.
O exemplo VariableFormattedText demonstra o uso da FormattedText
propriedade para uma única linha de texto, e VariableFormattedParagraph demonstra a técnica para um parágrafo inteiro, conforme mostrado aqui:
O programa NamedFontSizes usa um único Label
e um FormattedString
objeto para exibir todos os tamanhos de fonte nomeados para cada plataforma.