Resumo do Capítulo 3. Aprofundamento no texto

Baixar exemplo Baixar o exemplo

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.Fillcomo , 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.Fillde , 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, Centerou 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, MiddleTruncationou 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 Labelposição do e o tamanho e a posição do texto dentro do Label.VerticalTextAlignmentHorizontalExeAlignmentVerticalOptionsHorizontalOptions

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 para double valores RGB de 0 a 1
  • Color.FromRgb para valores RGB inteiros de 0 a 255
  • Color.FromRgba para double valores RGB com transparência
  • Color.FromRgba para valores RGB inteiros com transparência
  • Color.FromHsla para double valores HSL com transparência
  • Color.FromUint para um uint valor calculado como (B + 256 * (G + 256 * (R + 256 * A)))
  • Color.FromHex para um string 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 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 Lightcomo .

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, Mediume Large). O valor retornado do Medium membro não é necessariamente o mesmo Defaultque . O exemplo NamedFontSizes exibe texto com esses tamanhos nomeados.

Defina a FontAttributes propriedade de Label como um membro dessas FontAttributes enumerações, Bold, Italicou 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 Textpropriedades , FontFamily, FontSizeFontAttributes, 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:

Captura de tela tripla do parágrafo formatado variável

O programa NamedFontSizes usa um único Label e um FormattedString objeto para exibir todos os tamanhos de fonte nomeados para cada plataforma.