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
exibição mais detalhadamente, incluindo cor, fontes e formatação.
Encapsulando parágrafos
Quando a Text
propriedade de Label
contém texto longo, Label
o encapsula automaticamente em várias linhas, conforme demonstrado pela amostra de Baskervilles . Você pode inserir códigos Unicode como '\u2014' para o traço em ou caracteres C# como '\r' para quebrar em uma nova linha.
Quando as HorizontalOptions
propriedades e VerticalOptions
de um Label
são definidas LayoutOptions.Fill
como , o tamanho geral do Label
é regido pelo espaço que seu contêiner disponibiliza. Dizem Label
que o é restrito. O tamanho do Label
é o tamanho de seu contêiner.
Quando as HorizontalOptions
propriedades e VerticalOptions
são definidas como valores diferentes LayoutOptions.Fill
de , o tamanho do Label
é regido pelo espaço necessário para renderizar o texto, até o tamanho que seu contêiner disponibiliza para o Label
. Diz-se Label
que o é irrestrito e determina seu próprio tamanho.
(Observação: os termos restritos e irrestritos podem ser contra-intuitivos, pois uma exibição irrestrita geralmente é menor do que uma exibição restrita. Além disso, esses termos não são usados consistentemente nos primeiros capítulos do livro.)
Uma exibição como uma Label
pode ser restrita em uma dimensão e irrestrita na outra. Um Label
só quebrará o texto em várias linhas se for restrito horizontalmente.
Se um Label
for restrito, ele poderá 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 uma quebra de parágrafo ou são truncadas.
Cores de texto e plano de fundo
Defina as TextColor
propriedades e BackgroundColor
de Label
como Color
valores para controlar a cor do texto e da tela de fundo.
O BackgroundColor
se aplica à tela de fundo de toda a área ocupada pelo Label
. 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 para ver como eles afetam o tamanho e a Label
posição do e o tamanho e a posição do texto dentro do Label
.VerticalTextAlignment
HorizontalExeAlignment
VerticalOptions
HorizontalOptions
A estrutura Color
A Color
estrutura permite que você especifique cores como valores RGB (Vermelho-Verde-Azul) ou valores HSL (Hue-Saturation-Luminosity) 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 versus código.
Depois de criado, um Color
valor é imutável. As características da cor podem ser obtidas das seguintes propriedades:
Todos esses double
valores 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 público estático somente leitura 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 o 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 plano de fundo claro
- Android: texto claro em um plano de fundo escuro (no livro) ou texto escuro em um plano de fundo claro (para Design de Material via AppCompat no branch main do repositório de código de exemplo)
- 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 uma tela de fundo escura ou clara.
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 escuro à luz 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
atributo definido como Light
ou Dark
no arquivo App.xaml da plataforma. Por padrão, o arquivo App.xaml no projeto UWP contém um RequestedTheme
atributo definido Light
como .
Tamanhos e atributos de fonte
Defina a FontFamily
propriedade de como uma cadeia de Label
caracteres como "Times Roman" para selecionar uma família de fontes. No entanto, você precisa especificar uma família de fontes com suporte na plataforma específica e as plataformas são inconsistentes nesse sentido.
Defina a FontSize
propriedade de Label
como um double
para especificar a altura aproximada da fonte. Confira o Capítulo 5, Lidando com Tamanhos, para obter mais detalhes sobre como escolher de forma inteligente os tamanhos de fonte.
Como alternativa, você pode obter um dos vários tamanhos de fonte dependentes de plataforma predefinidos. 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 Default
que . 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 e Italic
com o operador OR bit a bit C#.
Texto formatado
Em todos os exemplos até agora, todo o texto exibido pelo Label
foi formatado uniformemente. Para variar a formatação dentro de uma cadeia de caracteres de texto, não defina a Text
propriedade de 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
FontAttributes
, ForegroundColor
, e BackgroundColor
.
O exemplo VariableFormattedText demonstra o uso da FormattedText
propriedade para uma única linha de texto e VariableFormattedParagraph demonstra a técnica de 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.