Partilhar via


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 Labelpelo . 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. HorizontalExeAlignmentVerticalOptionsHorizontalOptions

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 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 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 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, Mediume 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 Textpropriedades , FontFamily, FontSize, ForegroundColorFontAttributes, , 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:

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.