O Android 8.0 (API de nível 26) e a Biblioteca de Suporte do Android 26 introduzem a compatibilidade com APIs para solicitar fontes de um aplicativo provedor, em vez de agrupar arquivos no APK ou permitir que o APK faça o download de fontes. O recurso está disponível em dispositivos com a versão 14 ou mais recente da API do Android na Biblioteca de Suporte 26.
O recurso "Fontes para download" oferece os benefícios abaixo:
- Reduz o tamanho do app, aumentando a taxa de sucesso da instalação.
- Melhora a integridade geral do sistema, já que vários APKs podem compartilhar a mesma fonte usando um provedor. Isso faz os usuários economizarem os dados móveis, a memória do smartphone e o espaço em disco. Nesse modelo, a fonte é buscada na rede quando necessário.
Confira os seguintes recursos relacionados:
Como funciona o "Fontes para download"?
Um provedor de fontes é um aplicativo que recupera fontes e as armazena em cache de forma local, para que outros apps possam solicitar e compartilhar fontes. A Figura 1 ilustra o processo.

Noções básicas
Você pode usar o recurso "Fontes para download" das seguintes maneiras:
- Por meio do Android Studio e do Google Play Services
- De forma programática
- Pela Biblioteca de Suporte
Usar Fontes para download pelo Android Studio e o Google Play Services
Você pode configurar seu aplicativo para fazer o download de fontes usando o Android Studio 3.0 ou versões mais recentes. Para ajudar você a começar a usar o recurso "Fontes para download", use o provedor de fontes do Google Play Services.
Observação: o dispositivo precisa ter a versão 11 ou mais recente do Google Play Services para usar o Google Fonts.
- No Layout Editor, selecione uma TextView, e, em
Properties, selecione fontFamily > More Fonts.
Figura 2. Como usar o Layout Editor. A janela Resources será exibida.
- Na lista suspensa Source, selecione Google Fonts.
- Na caixa Fonts, selecione uma fonte.
- Selecione Create downloadable font e clique em OK.
Observação: para agrupar a fonte no pacote do app, selecione Add font to project.
Figura 3. Como selecionar uma fonte na janela "Resources".
O Android Studio gera automaticamente os arquivos XML relevantes que são necessários para renderizar a fonte corretamente no app.

Usar o "Fontes para download" de forma programática
Antes do Android 8.0 (API de nível 26), a Biblioteca de Suporte 26.0 oferece total compatibilidade com o "Fontes para download". Para ver mais informações sobre como usar a Biblioteca de Suporte, vá para a seção "Fontes para download" da Biblioteca de Suporte.
Para usar o recurso "Fontes para download" de forma programática, é necessário interagir com duas classes principais:
android.graphics.fonts.FontRequest
: essa classe permite criar uma solicitação de fonte.FontsContract
: essa classe permite criar um novo objetoTypeface
com base na solicitação de fonte.
Seu app recupera fontes do provedor de fontes usando a
API FontsContract
. Cada provedor tem o próprio conjunto de
restrições para versões do Android e linguagem de consulta compatíveis. Para
ver mais informações sobre as versões do Android e o formato de consulta, leia a
documentação do seu provedor.
Para fazer o download de uma fonte, siga estas etapas:
- Crie uma instância da classe
android.graphics.fonts.FontRequest
para solicitar a fonte do provedor. Para criar uma solicitação, transmita os seguintes parâmetros:- A autoridade do provedor de fontes.
- O pacote do provedor de fontes para confirmar a identidade do provedor.
- A consulta de string da fonte. Para ver mais informações sobre formatos de consulta, leia a documentação do seu provedor de fontes, como o Google Fonts
- Uma lista de conjuntos de hashes para que os certificados confirmem a identidade
do provedor.
Observação: não é necessário adicionar um certificado se você solicitar fontes de provedores pré-instalados. No entanto, sempre forneça um certificado se solicitar fontes pela Biblioteca de Suporte.
Kotlin
val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs )
Java
FontRequest request = new FontRequest("com.example.fontprovider", "com.example.fontprovider", "my font", certs);
Observação: você pode receber os valores de parâmetro do seu provedor de fontes. O Android Studio preenche automaticamente esses valores para os provedores compatíveis na IU.
- Crie uma instância da
classe
FontsContract.FontRequestCallback
. - Modifique o
método
onTypefaceRetrieved()
para indicar que a solicitação de fonte foi concluída. Informe a fonte recuperada como parâmetro. Você pode usar esse método para definir a fonte, conforme necessário. Por exemplo, você pode definir a fonte em umTextView
. - Modifique o
método
onTypefaceRequestFailed()
para receber informações sobre erros no processo de solicitação de fonte. Para ver mais informações sobre códigos de erro, consulteerror code constants
. - Chame o método
FontsContract.requestFont()
para recuperar a fonte do provedor da fontes. O método inicia uma verificação para determinar se a fonte existe no cache. Se a fonte não estiver disponível localmente, ela chamará o provedor da fontes, recuperará a fonte de forma assíncrona e transmitirá o resultado para o callback. Transmita os seguintes parâmetros:- Uma instância da classe
Context
- Uma instância da classe
android.graphics.fonts.FontRequest
- Um callback para receber os resultados da solicitação de fonte
- Um gerenciador para buscar fontes em uma linha de execução
Observação: esse gerenciador não pode ser o da linha de execução da interface do usuário.
- Uma instância da classe
A amostra de código a seguir ilustra o processo geral do "Fontes para download":
Kotlin
val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs ) val callback = object : FontsContract.FontRequestCallback() { override fun onTypefaceRetrieved(typeface: Typeface) { // Your code to use the font goes here ... } override fun onTypefaceRequestFailed(reason: Int) { // Your code to deal with the failure goes here ... } } FontsContract.requestFonts(context, request, handler, null, callback)
Java
FontRequest request = new FontRequest("com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs); FontsContract.FontRequestCallback callback = new FontsContract.FontRequestCallback() { @Override public void onTypefaceRetrieved(Typeface typeface) { // Your code to use the font goes here ... } @Override public void onTypefaceRequestFailed(int reason) { // Your code to deal with the failure goes here ... } }; FontsContract.requestFonts(context, request, handler, null, callback);
Para ver mais informações sobre como fazer o download de uma fonte de um provedor de fontes, consulte o app de amostra Fontes para download Java | Kotlin .
Usar o "Fontes para download" pela Biblioteca de Suporte
A Biblioteca de Suporte 26 oferece compatibilidade com o recurso "Fontes para download"
em dispositivos com a versão 14 ou mais recente da API do Android. O
pacote android.support.v4.provider
contém
classes FontsContractCompat
e FontRequest
para
implementar a compatibilidade com versões anteriores para o recurso "Fontes para download". As
classes da Biblioteca de Suporte contêm métodos semelhantes ao framework. O processo
de download de fontes também é semelhante ao processo mencionado na
seção Download de fontes.
Para fazer o download de fontes usando a Biblioteca de Suporte, importe as
classes FontsContractCompat
e FontRequest
do
pacote android.support.v4.provider
. Crie as instâncias
dessas classes em vez das classes FontsContract
e
android.graphics.fonts.FontRequest
de framework.
Observação: você precisa fornecer um certificado quando solicitar fontes pela Biblioteca de Suporte. Isso se aplica até mesmo para os provedores de fonte pré-instalados.
Adicionar dependência da Biblioteca de Suporte
Para usar as classes FontsContractCompat
e FontRequest
,
você precisa modificar as dependências do caminho de classe do projeto de app no
ambiente de desenvolvimento.
Para adicionar uma Biblioteca de Suporte ao projeto do app:
- Abra o arquivo
build.gradle
do aplicativo. - Adicione a Biblioteca de Suporte à seção
dependencies
.
Groovy
dependencies { ... implementation "com.android.support:support-compat:28.0.0" }
Kotlin
dependencies { ... implementation("com.android.support:support-compat:28.0.0") }
Usar o "Fontes para download" como recursos em XML
O Android 8.0 (API de nível 26) e a Biblioteca de Suporte 26 oferecem uma maneira mais rápida e conveniente de declarar uma fonte personalizada como um recurso no layout XML. Isso significa que não é necessário empacotar a fonte como um ativo. Você pode definir uma fonte personalizada para o tema inteiro, o que acelera a usabilidade de vários pesos e estilos, como Negrito, Médio ou Leve, quando fornecidos.
- Crie um novo arquivo XML na pasta
res/font
. - Adicione um elemento raiz
<font-family>
e defina os atributos relacionados à fonte, conforme mostrado na amostra de arquivo XML a seguir: - Referencie o arquivo como @font/nome_do_arquivo_da_fonte no arquivo XML de layout. Você também
pode usar o método
getFont()
para recuperar o arquivo de forma programática. Por exemplo,getFont(R.font.font_file_name)
.
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android" android:fontProviderAuthority="com.example.fontprovider.authority" android:fontProviderPackage="com.example.fontprovider" android:fontProviderQuery="example font" android:fontProviderCerts="@array/certs"> </font-family>
Declarar fontes antecipadamente no manifesto
A inflação do layout e a recuperação de recursos são tarefas síncronas. Por padrão, a primeira tentativa de recuperar fontes aciona uma solicitação para o provedor de fontes e, portanto, aumenta o tempo do primeiro layout. Para evitar atrasos, é possível declarar as fontes que precisam ser recuperadas antecipadamente no manifesto. Depois que o sistema recupera a fonte do provedor, ela fica disponível imediatamente. Se a recuperação da fonte demorar mais que o esperado, o sistema cancelará o processo de busca e usará a fonte padrão.
Para declarar fontes antecipadamente no manifesto, siga as seguintes etapas:
- Crie uma matriz de recursos em
res/values/arrays.xml
e declare o "Fontes para download" que você quer buscar antecipadamente. - Use uma tag
meta-data
para declarar a matriz de recursos no manifesto.
res/values/arrays.xml <?xml version="1.0" encoding="utf-8"?> <resources> <array name="preloaded_fonts"> <item>@font/font1</item> <item>@font/font2</item> </array> </resources>
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
Adicionar certificados
Quando um provedor de fontes não estiver pré-instalado ou caso você esteja usando a Biblioteca de Suporte, será necessário declarar os certificados com os quais o provedor de fontes está conectado. O sistema usa os certificados para confirmar a identidade do provedor da fontes.
Observação: o Android Studio pode preencher automaticamente os valores do provedor do Google Play Services se você usar a ferramenta seletora de fontes no Android Studio. Para ver mais informações sobre o uso do Android Studio para o download de fontes, vá para a seção Usar o "Fontes para download" no Android Studio e no Google Play Services.
Siga as seguintes etapas para adicionar certificados:
- Crie uma matriz de strings com os detalhes do certificado. Para ver mais informações sobre os detalhes do certificado, consulte a documentação do seu provedor de fontes.
- Defina o atributo
fontProviderCerts
para a matriz.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"
Observação: caso o provedor tenha mais de um conjunto de certificados, é possível definir uma matriz de strings.
Fontes para download no Compose
No Compose 1.2-alpha07 e em versões mais recentes, você pode usar a API de fontes para download no app Compose para fazer o download do Google Fonts de forma assíncrona e usá-las no app. Para mais informações, consulte a documentação sobre Fontes para download do Compose.