Ajuste de Texto
com Autosizing
TextView - Android
Jetpack
thiengo.com.br
O que é e por que a Autosizing API?
A Autosizing TextView API é um dos componentes de experiência do usuário do pacote Jetpack, alias,
junto ao Android Emoji é uma das APIs mais simples.
Segundo a documentação oficial, a Autosizing veio principalmente com o objetivo de manter o bom
visual do texto do aplicativo quando há mudança de tipo de aparelho: de smartphone para tablet, por
exemplo.
A regra da Autosizing API é:
Expandir ou contrair o texto (tamanho de fonte) o quanto possível sem que haja corte de
conteúdo.
O corte de conteúdo é possível em um caso especifico, quando o tamanho mínimo definido para o
texto faz com que ele ainda seja grande o suficiente para ficar enquadrado por completo no espaço
do TextView.
Thiengo, então a Autosizing API somente é funcional no componente TextView?
Não. Em subclasses também. Um outro componente visual popular é o EditText.
Antes de partirmos aos códigos, ressalto que em meus testes encontrei alguns outros domínios em
que a Autosizing é útil, sem que seja necessária a mudança de aparelho. Exemplo: domínios de
problemas onde o título do conteúdo é importante em destaque, esses domínios também se
beneficiarão da API em estudo.
Instalação da API
Para que seja possível o uso da versão de suporte da Autosizing API, é necessária
a referência, direta ou indireta, a support-v4 26.0 ou a alguma versão superior
dela, isso no Gradle App Level, ou build.gradle (Module: app):
Configuração padrão de Autosizing
Primeiro é importante saber que no TextView (ou em suas subclasses em uso) não é
recomendada a utilização do valor wrap_content em android:layout_height ou em
android:layout_width, isso pois os resultados de enquadramento adequado ficam inconsistentes.
Assim, veja o layout a seguir, note o uso do atributo app:autoSizeTextType no primeiro TextView:
O namespace app: está sendo utilizado, pois junto a API de suporte essa é a
configuração correta.
Sem a API de suporte, a parti do Android 8, utilizaríamos android:. Os valores
possíveis em autoSizeTextType são: uniform (ativação do autosizing); e none (não
ativação).
Executando o projeto Android com o código de layout anterior, temos:
Também é possível o acionamento do AutoSizeTextType via código dinâmico,
Kotlin ou Java:
Trabalhando a granularidade
A granularidade é a definição do:
- tamanho mínimo - autoSizeMinTextSize;
- tamanho máximo - autoSizeMaxTextSize;
- e valor de mudança do tamanho atual para o próximo tamanho -
autoSizeStepGranularity.
Entre os tamanhos mínimo e máximo definidos há inúmeros outros tamanhos
possíveis de acordo com o valor colocado para grau de mudança, ou step de
granularidade.
Utilizando o primeiro TextView do layout da seção anterior, junto aos atributos de
granularidade, temos:
Note que para ter efeito de autosizing o autoSizeTextType="uniform" ainda precisa ser
definido. Executando o projeto com a nova configuração no primeiro TextView, temos:
Na configuração atual tem que:
- O tamanho mínimo possível em contração é de 14sp;
- O tamanho máximo possível em expansão é de 20sp;
- Devido ao step de 2sp os tamanhos intermediários possíveis são 16sp e 18sp.
A definição em código dinâmico seria:
A granularidade padrão, quando não definida de maneira explícita, é:
- Tamanho mínimo = 12sp;
- Tamanho máximo = 112sp;
- Step = 1px (é isso mesmo, 1 pixel).
Tamanhos pré-definidos
É possível, com um array e o atributo autoSizePresetSizes definirmos os valores
cabíveis na expansão ou contração do texto. O local comum para conter esses valores
é o /res/values/arrays.xml:
E então, utilizando o primeiro TextView do layout de testes, temos:
Note que como acontece com a definição de granularidade, com PresetSizes
também temos de utilizar autoSizeTextType=“uniform".
Executando o projeto com a nova configuração do TextView, temos:
A definição de PresetSizes em código dinâmico pede primeiro que tenhamos um
array de inteiros (sem o sufixo sp):
Depois o código:
Aqui foi preferível colocar os inteiros em um XML de array, mas você pode defini-lo
também em seu código dinâmico.
Conclusão
Felizmente a Autosizing é uma API simples de entender e de utilizar, com ela,
mesmo que somente em domínios de problemas específicos, não necessitamos
mais de apoio de APIs de terceiro para o correto enquadramento do texto.
A Autosizing API faz parte do pacote de APIs e frameworks Android Jetpack,
pacote que contém todas as tecnologias consideradas, pelo Android, modernas
para o desenvolvimento eficiente de aplicativos.
Se você trabalha com títulos em destaque, títulos de itens e produtos, por
exemplo, pode ser que a Autosizing TextView seja um bom caminho para melhorar
o seu app Android.
Um ponto importante a ser abordado é que as definições de estilo e de família de
fonte personalizada no componente visual de texto, essas definições não
removem a funcionalidade de Autosizing, algo que ocorria logo no lançamento da
API.
Fontes
Conteúdo completo, em texto e em vídeo, no link a seguir:
• Ajuste de Texto com Autosizing TextView - Android Jetpack.
Fontes:
• Autosizing TextViews;
• Android Jetpack: Autosizing TextView;
• Auto-Sizing TextViews in Android;
• Autosizing of TextView doesn't work (Android O) - Resposta de Sira Lam.
Para estudo
• Treinamento oficial:
• Prototipagem Profissional de Aplicativos Android.
• Meus livros:
• Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia;
• Receitas Para Desenvolvedores Android;
• Refatorando Para Programas Limpos.
• Redes:
• Udemy;
• YouTube;
• Facebook;
• LinkedIn;
• GitHub;
• Twitter;
• Google Plus.
• Blog App.
Ajuste de Texto com Autosizing
TextView - Android Jetpack
thiengo.com.br
Vinícius Thiengo
thiengocalopsita@gmail.com

Ajuste de Texto com Autosizing TextView - Android Jetpack

  • 1.
    Ajuste de Texto comAutosizing TextView - Android Jetpack thiengo.com.br
  • 2.
    O que ée por que a Autosizing API? A Autosizing TextView API é um dos componentes de experiência do usuário do pacote Jetpack, alias, junto ao Android Emoji é uma das APIs mais simples. Segundo a documentação oficial, a Autosizing veio principalmente com o objetivo de manter o bom visual do texto do aplicativo quando há mudança de tipo de aparelho: de smartphone para tablet, por exemplo. A regra da Autosizing API é: Expandir ou contrair o texto (tamanho de fonte) o quanto possível sem que haja corte de conteúdo. O corte de conteúdo é possível em um caso especifico, quando o tamanho mínimo definido para o texto faz com que ele ainda seja grande o suficiente para ficar enquadrado por completo no espaço do TextView. Thiengo, então a Autosizing API somente é funcional no componente TextView? Não. Em subclasses também. Um outro componente visual popular é o EditText. Antes de partirmos aos códigos, ressalto que em meus testes encontrei alguns outros domínios em que a Autosizing é útil, sem que seja necessária a mudança de aparelho. Exemplo: domínios de problemas onde o título do conteúdo é importante em destaque, esses domínios também se beneficiarão da API em estudo.
  • 3.
    Instalação da API Paraque seja possível o uso da versão de suporte da Autosizing API, é necessária a referência, direta ou indireta, a support-v4 26.0 ou a alguma versão superior dela, isso no Gradle App Level, ou build.gradle (Module: app):
  • 4.
    Configuração padrão deAutosizing Primeiro é importante saber que no TextView (ou em suas subclasses em uso) não é recomendada a utilização do valor wrap_content em android:layout_height ou em android:layout_width, isso pois os resultados de enquadramento adequado ficam inconsistentes. Assim, veja o layout a seguir, note o uso do atributo app:autoSizeTextType no primeiro TextView:
  • 5.
    O namespace app:está sendo utilizado, pois junto a API de suporte essa é a configuração correta. Sem a API de suporte, a parti do Android 8, utilizaríamos android:. Os valores possíveis em autoSizeTextType são: uniform (ativação do autosizing); e none (não ativação). Executando o projeto Android com o código de layout anterior, temos:
  • 6.
    Também é possívelo acionamento do AutoSizeTextType via código dinâmico, Kotlin ou Java:
  • 7.
    Trabalhando a granularidade Agranularidade é a definição do: - tamanho mínimo - autoSizeMinTextSize; - tamanho máximo - autoSizeMaxTextSize; - e valor de mudança do tamanho atual para o próximo tamanho - autoSizeStepGranularity. Entre os tamanhos mínimo e máximo definidos há inúmeros outros tamanhos possíveis de acordo com o valor colocado para grau de mudança, ou step de granularidade.
  • 8.
    Utilizando o primeiroTextView do layout da seção anterior, junto aos atributos de granularidade, temos:
  • 9.
    Note que parater efeito de autosizing o autoSizeTextType="uniform" ainda precisa ser definido. Executando o projeto com a nova configuração no primeiro TextView, temos:
  • 10.
    Na configuração atualtem que: - O tamanho mínimo possível em contração é de 14sp; - O tamanho máximo possível em expansão é de 20sp; - Devido ao step de 2sp os tamanhos intermediários possíveis são 16sp e 18sp. A definição em código dinâmico seria: A granularidade padrão, quando não definida de maneira explícita, é: - Tamanho mínimo = 12sp; - Tamanho máximo = 112sp; - Step = 1px (é isso mesmo, 1 pixel).
  • 11.
    Tamanhos pré-definidos É possível,com um array e o atributo autoSizePresetSizes definirmos os valores cabíveis na expansão ou contração do texto. O local comum para conter esses valores é o /res/values/arrays.xml: E então, utilizando o primeiro TextView do layout de testes, temos:
  • 12.
    Note que comoacontece com a definição de granularidade, com PresetSizes também temos de utilizar autoSizeTextType=“uniform". Executando o projeto com a nova configuração do TextView, temos:
  • 13.
    A definição dePresetSizes em código dinâmico pede primeiro que tenhamos um array de inteiros (sem o sufixo sp): Depois o código: Aqui foi preferível colocar os inteiros em um XML de array, mas você pode defini-lo também em seu código dinâmico.
  • 14.
    Conclusão Felizmente a Autosizingé uma API simples de entender e de utilizar, com ela, mesmo que somente em domínios de problemas específicos, não necessitamos mais de apoio de APIs de terceiro para o correto enquadramento do texto. A Autosizing API faz parte do pacote de APIs e frameworks Android Jetpack, pacote que contém todas as tecnologias consideradas, pelo Android, modernas para o desenvolvimento eficiente de aplicativos. Se você trabalha com títulos em destaque, títulos de itens e produtos, por exemplo, pode ser que a Autosizing TextView seja um bom caminho para melhorar o seu app Android. Um ponto importante a ser abordado é que as definições de estilo e de família de fonte personalizada no componente visual de texto, essas definições não removem a funcionalidade de Autosizing, algo que ocorria logo no lançamento da API.
  • 15.
    Fontes Conteúdo completo, emtexto e em vídeo, no link a seguir: • Ajuste de Texto com Autosizing TextView - Android Jetpack. Fontes: • Autosizing TextViews; • Android Jetpack: Autosizing TextView; • Auto-Sizing TextViews in Android; • Autosizing of TextView doesn't work (Android O) - Resposta de Sira Lam.
  • 16.
    Para estudo • Treinamentooficial: • Prototipagem Profissional de Aplicativos Android. • Meus livros: • Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia; • Receitas Para Desenvolvedores Android; • Refatorando Para Programas Limpos. • Redes: • Udemy; • YouTube; • Facebook; • LinkedIn; • GitHub; • Twitter; • Google Plus. • Blog App.
  • 17.
    Ajuste de Textocom Autosizing TextView - Android Jetpack thiengo.com.br Vinícius Thiengo thiengocalopsita@gmail.com