Usar fontes para download

Testar o Compose
O Jetpack Compose é o kit de ferramentas de interface recomendado para Android. Aprenda a usar texto no Compose.

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.
. Para ter uma experiência prática com o "Fontes para download", consulte a DownloadableFonts (em inglês) app de exemplo.

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
Figura 1. Processo de "Fontes para download".

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:

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.

  1. No Layout Editor, selecione um TextView. Em seguida, em Atributos, selecione fontFamily > Mais fontes.
    Uma imagem mostrando o Layout Editor do Android Studio.
    Figura 2. Como usar o Layout Editor.
    .
    A janela Resources será exibida.
  2. No menu Source, selecione Google Fonts.
  3. Na caixa Fontes, selecione uma opção em "Para download". área
  4. Selecione Criar fonte para download e clique em OK.
    Uma imagem mostrando como selecionar fontes na janela "Recursos"
    Figura 3. Selecione uma fonte na janela Resources.
  5. 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
    Figura 4. Visualização do arquivo da fonte.

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:

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:

  1. 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);
    
  2. Crie uma instância do FontsContract.FontRequestCallback .
  3. 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 uma TextView:
  4. 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.
  5. 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

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.

  1. Crie um novo arquivo XML na pasta res/font.
  2. Adicione um elemento raiz <font-family> e defina os atributos relacionados à fonte, como mostrados no exemplo de arquivo XML a seguir:
  3. <?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>
    
  4. Faça referência ao arquivo como @font/font_file_name no arquivo XML de layout. Você também pode use o método getFont() para recuperar o arquivo de forma programática, como getFont(R.font.font_file_name).

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:

  1. Crie uma matriz de recursos em res/values/arrays.xml e declare as fontes que você quer fazer a pré-busca.
  2. 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>
    
  3. Use uma tag meta-data para declarar a matriz de recursos no manifesto.
  4. <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:

  1. 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.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. Defina o atributo fontProviderCerts para a matriz.
  4. 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.