Trabalhar com texto é uma tarefa fundamental ao criar interfaces de aplicativos móveis modernos. Da seleção de fontes ao ajuste do espaçamento entre caracteres — cada aspecto afeta a percepção do produto. De acordo com a Documentação Apple NSAttributedString, a formatação adequada do texto está diretamente relacionada à legibilidade e acessibilidade da interface.
Pontos principais
NSAttributedString é a classe fundamental do iOS para trabalhar com texto formatado. Ela permite aplicar atributos a caracteres ou intervalos individuais: fonte via UIFont, cor via UIColor, espaçamento entre caracteres via kern e espaçamento entre linhas via NSMutableParagraphStyle. Em aplicativos móveis, NSAttributedString é usado em toda parte — desde UILabel até UITextView complexo com suporte a edição.
UIFont é a classe principal para trabalhar com fontes no iOS. Ela suporta tipos de letra do sistema, fontes personalizadas e Dynamic Type. UIFont(name:size:) carrega uma fonte pelo nome, UIFont.systemFont(ofSize:weight:) carrega a fonte do sistema. UIFontDescriptor permite modificar uma fonte existente: alterar tamanho, peso ou adicionar uma matriz de transformação. Para fontes personalizadas, o arquivo .ttf é adicionado ao projeto e registrado no Info.plist sob a chave Fonts provided by application.
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "HelveticaNeue-Bold", size: 18) as Any,
.foregroundColor: UIColor.darkGray as Any,
.kern: 1.5 as Any
]
let attributedString = NSAttributedString(
string: "Форматированный текст",
attributes: attributes
)
label.attributedText = attributedString
NSMutableParagraphStyle é uma versão mutável de ParagraphStyle para configurar a exibição de parágrafos. Ele controla o alinhamento (alignment), o espaçamento entre linhas (lineSpacing), as margens (headIndent, tailIndent) e o modo de corte (lineBreakMode). ParagraphStyle é crítico para a legibilidade de textos longos em dispositivos móveis: um lineSpacing adequado evita a fusão de linhas, e lineBreakMode evita o corte de palavras. A configuração paragraphSpacing define o espaço entre parágrafos.
SpannableString é a principal ferramenta para formatação de texto no Android. Ela funciona através de um mecanismo de objetos Span, cada um responsável por um aspecto: StyleSpan para negrito ou itálico, ForegroundColorSpan para cor, URLSpan para links, UnderlineSpan para sublinhado. SpannableStringBuilder é o equivalente de NSMutableAttributedString, permitindo construir texto a partir de múltiplos fragmentos. Compreender SpannableString é essencial para criar interfaces flexíveis com texto formatado em aplicativos móveis.
Typeface é a classe para trabalhar com fontes no Android. Ela suporta os tipos de letra do sistema Roboto e Noto, bem como fontes personalizadas. Typeface.createFromResource() carrega uma fonte de res/font/, Typeface.createFromAsset() carrega da pasta assets. Android 8.0+ suporta famílias de fontes em XML, combinando vários arquivos de fonte em um único recurso. Uma fonte personalizada para texto em aplicativos móveis no Android é definida através do atributo android:fontFamily ou programaticamente usando setTypeface().
TextMeasurer (API 29+) é uma ferramenta moderna para medir texto sem vincular a uma View. Ele calcula largura, altura e posições dos caracteres antes da renderização. Em APIs antigas, Paint.measureText() é usado para texto de linha única ou StaticLayout para texto multilinha. TextMeasurer é especialmente útil em Views personalizadas onde o texto é desenhado via Canvas.drawText(). A medição correta evita o corte de caracteres na interface.
val spannable = SpannableString("Жирный текст с цветом")
spannable.setSpan(
StyleSpan(Typeface.BOLD),
0, 6,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.setSpan(
ForegroundColorSpan(Color.RED),
14, 19,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable
Tipografia em aplicativos móveis é uma configuração abrangente de fontes, espaçamento entre caracteres e entre linhas. A tipografia adequada no desenvolvimento móvel afeta diretamente a legibilidade do texto e a percepção visual da interface. Vamos analisar os principais parâmetros disponíveis em ambas as plataformas.
Kerning é o ajuste de espaço entre pares específicos de caracteres (AV, To, Wa). Tracking é o espaçamento uniforme entre caracteres para todo o texto ou parte dele. No iOS, o kerning é definido via NSKernAttributeName, no Android — através da propriedade letterSpacing de TextView. Valores negativos aproximam os caracteres, valores positivos os afastam. A tipografia no desenvolvimento móvel requer um ajuste cuidadoso desses parâmetros: para títulos grandes, o espaçamento entre caracteres geralmente é aumentado, para o texto do corpo permanece padrão.
| Parâmetro | iOS | Android |
|---|---|---|
| String estilizada | NSAttributedString | SpannableString |
| Fonte | UIFont / CTFont | Typeface |
| Espaçamento entre caracteres | NSKernAttributeName | letterSpacing |
| Espaçamento entre linhas | lineSpacing | lineSpacingExtra |
| Ligaduras | NSLigatureAttributeName | Recursos OpenType |
| Elipse | lineBreakMode .byTruncatingTail | android:ellipsize |
Ligaduras são glifos especiais que substituem combinações de dois ou mais caracteres: fi, fl, ffi. No iOS, as ligaduras são controladas via NSLigatureAttributeName: 0 — desativadas, 1 — padrão, 2 — todas disponíveis. No Android, as ligaduras são controladas no nível da fonte através de recursos OpenType. Ativar ligaduras melhora a aparência do texto, especialmente em tipos de letra com serifa. A tipografia no desenvolvimento móvel usa ligaduras principalmente para títulos e logotipos.
Fontes personalizadas são uma das principais ferramentas para criar um estilo visual único para um aplicativo. Elas ajudam a destacar a marca e melhorar a experiência do usuário. Em aplicativos móveis, fontes personalizadas são usadas para títulos, logotipos, elementos de destaque e identidade corporativa.
Variable Fonts é uma tecnologia moderna de fontes onde um único arquivo contém múltiplos estilos: de fino a extra-negrito, de estreito a largo. Isso reduz o tamanho do aplicativo substituindo vários arquivos de fonte por um. No iOS, Variable Fonts são suportadas via UIFont com o parâmetro weight. No Android — via Typeface.Builder especificando os eixos de variabilidade wght, wdth, slnt. Usar Variable Fonts simplifica a tipografia em aplicativos móveis: o desenvolvedor não precisa carregar arquivos separados para cada estilo.
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
NSTextAttachment no iOS permite incorporar UIImage dentro de NSAttributedString — a imagem se alinha à linha de base e se move junto com o texto. No Android, o equivalente é ImageSpan dentro de SpannableString. Ambas as abordagens são úteis para chat com emojis, feeds de notícias com ícones e formulários com caixas de seleção personalizadas. É importante dimensionar corretamente a imagem para corresponder à altura da fonte para que o texto e os gráficos pareçam harmoniosos.
Além da formatação básica, o texto em aplicativos móveis suporta efeitos visuais adicionais: sombras, contorno, tachado e sublinhado. Essas ferramentas expandem as possibilidades da tipografia, mas exigem aplicação cuidadosa para manter a legibilidade.
Sombra do texto no iOS é definida via NSShadow com offset, blurRadius e color. Contorno — via NSStrokeWidthAttributeName: valores negativos criam preenchimento com contorno, valores positivos criam apenas o contorno. Tachado — NSUnderlineStyle (.single, .thick, .double). No Android, a sombra de TextView é configurada via android:shadowRadius, android:shadowDx, android:shadowDy. SpannableString suporta StrikethroughSpan e UnderlineSpan. O contorno do texto no Android é implementado via OutlineSpan ou uma fonte personalizada.
Elipse é o truncamento de texto com reticências quando o contêiner transborda. No iOS, é configurado via lineBreakMode .byTruncatingTail e numberOfLines. No Android — via android:ellipsize="end" e android:maxLines. Marquee é uma animação de texto rolante disponível no Android via android:ellipsize="marquee". No iOS, não há equivalente nativo — a biblioteca MarqueeLabel é usada. A elipse é obrigatória para todos os textos de linha única em aplicativos móveis para evitar o corte de conteúdo.
Dynamic Type é um sistema de texto adaptativo no iOS que ajusta o tamanho da fonte com base nas configurações de Acessibilidade do usuário. Use UIFontMetrics para dimensionar fontes personalizadas. Dynamic Type é obrigatório para aplicativos compatíveis com Acessibilidade. No Android, o equivalente são unidades sp e scaledPixels, que se dimensionam de acordo com as configurações de tamanho de texto do sistema.
Perguntas frequentes
NSAttributedString é uma classe iOS para criar texto formatado com atributos de fonte, cor e estilo no nível de caracteres e intervalos.
SpannableString é uma classe Android para marcação de texto através de objetos Span: ForegroundColorSpan, StyleSpan, URLSpan, UnderlineSpan.
Adicione o arquivo .ttf ao projeto, especifique-o no Info.plist sob a chave Fonts provided by application, depois use UIFont(name:).
Coloque o arquivo .ttf em res/font/, crie uma família de fontes XML e especifique android:fontFamily ou use Typeface.createFromAsset().
Kerning é o espaço entre pares de caracteres. Ligaduras são glifos especiais para combinações de letras. Eles são controlados via NSKernAttributeName e NSLigatureAttributeName.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.