➙ Conteúdo completo, texto e vídeo, em: https://www.thiengo.com.br/ajuste-de-texto-com-autosizing-textview-android-jetpack
Neste conjunto de slides vamos ao estudo completo de uma das novas APIs adicionadas ao Android junto ao release do Android 8, Oreo. Autosizing TextView, para expansão e contração de conteúdo em texto de forma dinâmica.
Vamos trabalhar direto com a API de suporte que diferente da API normal, dá suporte a partir do Android 4.0, Ice Cream Sandwich.
➙ Para receber o conteúdo do blog em primeira mão, assine a lista de emails em: http://www.thiengo.com.br
Abraço.
▶ Treinamento oficial:
➙ Prototipagem Profissional de Aplicativos Android:
↳ https://www.udemy.com/android-prototipagem-profissional-de-aplicativos/?persist_locale&locale=pt_BR
▶ Livros oficiais:
➙ Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia:
↳ https://www.thiengo.com.br/livro-desenvolvedor-kotlin-android
➙ Receitas Para Desenvolvedores Android:
↳ https://www.thiengo.com.br/livro-receitas-para-desenvolvedores-android
➙ Refatorando Para Programas Limpos:
↳ https://www.thiengo.com.br/livro-refatorando-para-programas-limpos
▶ Redes:
➙ Udemy: https://www.udemy.com/user/vinicius-thiengo/?persist_locale&locale=pt_BR
➙ YouTube: https://www.youtube.com/user/thiengoCalopsita
➙ Facebook: https://www.facebook.com/thiengoCalopsita
➙ LinkedIn: https://www.linkedin.com/in/vin%C3%ADcius-thiengo-5179b180/
➙ GitHub: https://github.com/viniciusthiengo
➙ Twitter: https://twitter.com/thiengoCalops
➙ Google Plus: https://plus.google.com/+ThiengoCalopsita
▶ Blog App:
➙ https://play.google.com/store/apps/details?id=br.thiengocalopsita&hl=pt_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
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):
4. 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:
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ível o acionamento do AutoSizeTextType via código dinâmico,
Kotlin ou Java:
7. 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.
8. Utilizando o primeiro TextView do layout da seção anterior, junto aos atributos de
granularidade, temos:
9. 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:
10. 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).
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 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:
13. 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.
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, 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.
16. 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.
17. Ajuste de Texto com Autosizing
TextView - Android Jetpack
thiengo.com.br
Vinícius Thiengo
thiengocalopsita@gmail.com