O recurso "Fontes para download" permite que as APIs solicitem fontes de um aplicativo provedor em vez de agrupar arquivos no aplicativo ou permitir que ele faça o download de fontes. O "Fontes para download" está disponível em dispositivos com a versão 14 ou mais recente da API do Android usando a biblioteca AndroidX Core.
O recurso "Fontes para download" oferece os seguintes benefícios:
- Reduz o tamanho do app, aumentando a taxa de sucesso da instalação.
- Melhora a integridade geral do sistema, já que vários apps podem compartilhar a mesma fonte usando uma de nuvem. Isso economiza aos usuários os dados móveis, a memória do smartphone e o espaço em disco. Nesse modelo, fonte é buscada na rede quando necessário.
Como funcionam as Fontes para download?
Um provedor de fontes é um aplicativo que recupera fontes e as armazena em cache localmente para que outros aplicativos possam solicitar e compartilhar fontes. A figura a seguir ilustra o processo.
![Uma imagem mostrando os principais componentes do processo de compatibilidade de emojis](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/downloadable-fonts/downloadable-fonts-process.png?authuser=9&hl=pt)
Noções básicas
Você pode usar o recurso "Fontes para download" das seguintes maneiras, que são discutidas em detalhes: nas próximas seções:
- Como usar o Android Studio e o Google Play Services
- De forma programática
- Como usar a biblioteca AndroidX Core
Usar o "Fontes para download" com o 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ê começar a usar o recurso "Fontes para download", use o provedor de fontes do Google Play serviços.
- No Layout Editor, selecione um
TextView
. Em seguida, em Atributos, selecione fontFamily > Mais fontes.Figura 2. Como usar o Layout Editor. . - No menu Source, selecione Google Fonts.
- Na caixa Fontes, selecione uma opção em "Para download". área
- Selecione Criar fonte para download e clique em OK.
Figura 3. Selecione uma fonte na janela Resources.
O Android Studio gera automaticamente os arquivos XML relevantes necessários para renderizar a fonte. corretamente no seu app.
![Uma imagem mostrando como visualizar fontes](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/downloadable-fonts/preview-fonts.png?authuser=9&hl=pt)
Usar o "Fontes para download" de forma programática
A partir do Android 8.0 (nível 26 da API), o AndroidX Core oferece suporte total ao "Fontes para download". Para mais informações sobre como usar a biblioteca AndroidX Core, consulte a Seção "Fontes para download da biblioteca AndroidX Core" nesta página.
Para usar o recurso "Fontes para download" de forma programática, interaja com duas classes principais:
android.graphics.fonts.FontRequest
: essa classe permite criar uma solicitação de fonte.FontsContractCompat
: essa classe permite criar um novoTypeface
com base em a solicitação de fonte.
O app extrai fontes do provedor de fontes usando a API FontsContract
. Cada
provedor tem o próprio conjunto de restrições para as versões do Android e a linguagem de consulta com suporte. Para
Para mais informações sobre as versões do Android e o formato da consulta, consulte a
na documentação do Google Cloud.
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 de provedor de fontes para confirmar a identidade do provedor.
- A consulta de string da fonte. Para mais informações sobre formatos de consulta, confira sua fonte documentação do provedor, como Fontes do Google.
- Uma lista de conjuntos de hashes para os certificados para verificar a identidade do provedor.
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);
- Crie uma instância do
FontsContract.FontRequestCallback
. - Modifique o
método
onTypefaceRetrieved()
para indicar que a solicitação de fonte foi concluída. Forneça 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 umaTextView
: - Modifique o
método
onTypefaceRequestFailed()
para receber informações sobre erros no processo de solicitação de fonte. Para mais informações sobre códigos de erro, consulte a constantes de código de erro. - Chame o método
FontsContract.requestFont()
para extrair a fonte da fonte. de nuvem. O método inicia uma verificação para determinar se a fonte existe no cache. Se a fonte não estiver disponível localmente, ele chama o provedor da fonte, recupera a fonte de forma assíncrona e passa o resultado ao callback. Transmita os seguintes parâmetros:- Uma instância do
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
- Uma instância do
Classe
O exemplo 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 mais informações sobre como fazer o download de uma fonte de um provedor de fontes, consulte a DownloadableFonts (em inglês) app de exemplo.
Usar "Fontes para download" com o AndroidX Core
O AndroidX Core é compatível com o recurso "Fontes para download" em dispositivos com Android.
Versões 14 ou mais recentes da API. A
androidx.core.provider
O pacote contém as classes FontsContractCompat
e FontRequest
para implementar
suporte ao recurso "Fontes para download", que é compatível com versões anteriores. As classes do AndroidX contêm métodos
semelhante aos métodos do framework, e o processo de download de fontes é semelhante ao
descritos na seção desta página sobre
usar o "Fontes para download" de forma programática.
Para fazer o download de fontes usando o AndroidX, importe FontsContractCompat
e
Classes FontRequest
do pacote androidx.core.provider
. Criar
instâncias dessas classes em vez de
FontsContract
e
Classes de framework android.graphics.fonts.FontRequest
.
Adicionar a dependência do AndroidX Core
Para usar as classes FontsContractCompat
e FontRequest
, modifique
dependências do caminho de classe do seu projeto de app no seu ambiente de desenvolvimento.
Para adicionar o AndroidX Core ao projeto do seu aplicativo, adicione a seguinte dependência ao arquivo
Arquivo build.gradle
:
Groovy
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
Usar o "Fontes para download" como recursos em XML
O Android 8.0 (nível 26 da API) e o AndroidX Core oferecem uma maneira mais rápida e conveniente de declarar uma fonte personalizada como um recurso no layout XML. Isso significa que não há necessidade de agrupar a fonte como um recurso. Você pode definir uma fonte personalizada para todo o seu tema, o que acelera a usabilidade para 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, como mostrados no exemplo de arquivo XML a seguir: - Faça referência ao arquivo como
@font/font_file_name
no arquivo XML de layout. Você também pode use o métodogetFont()
para recuperar o arquivo de forma programática, comogetFont(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 previamente 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 ao provedor de fontes e, portanto, aumenta o primeiro layout tempo de resposta. Para evitar atrasos, você pode declarar previamente as fontes que precisam ser recuperadas no manifesto. Depois que o sistema recupera a fonte do provedor, ela fica disponível imediatamente. Se a fonte for demora mais do que o esperado, o sistema cancela o processo de busca e usa o fonte.
Para declarar as fontes previamente no manifesto, siga estas etapas:
- Crie uma matriz de recursos em
res/values/arrays.xml
e declare as fontes que você quer fazer a pré-busca. - 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 se você estiver usando a biblioteca AndroidX Core, declare os certificados com os quais o provedor de fontes tem assinatura. O sistema usa os certificados para verificar identidade do provedor de fontes.
Siga as seguintes etapas para adicionar certificados:
- Crie uma matriz de strings com os detalhes do certificado. Para mais informações sobre certificados detalhes, 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"
Fontes para download no Compose
A partir de Compose versão 1.2-alpha07 você pode usar a API Downloadable Fonts no app Compose para fazer o download. Fontes do Google de forma assíncrona e use-as no app. Para mais informações, consulte a Documentação Fontes para download do Compose.