Downloadable Fonts

Android 8.0 (API nível 26) e Android Support Library 26 introduzem o suporte para APIs para solicitar fontes de uma aplicação fornecedora em vez de agrupar ficheiros no APK ou deixar o APK descarregar fontes. A funcionalidade está disponível em dispositivos que executam APIs Android versões 14 e superiores através da Biblioteca de suporte 26.

A funcionalidade de fontes transferíveis oferece os seguintes benefícios:

  • Diminui o tamanho do APK
  • Aprimora a taxa de sucesso da instalação da aplicação
  • Improva a saúde geral do sistema, uma vez que múltiplos APKs podem partilhar a mesma fonte através de um fornecedor. Isto poupa aos utilizadores dados celulares, memória do telefone, e espaço em disco. Neste modelo, a fonte é buscada através da rede quando necessário.

Consulte os seguintes recursos relacionados:

  • Amostra de fontes descarregáveis Java | Kotlin

Como funcionam as fontes descarregáveis?

Um fornecedor de fontes é uma aplicação que recupera fontes e as coloca em cache localmente para que outras aplicações possam solicitar e partilhar fontes. A figura 1 ilustra o processo.

Principais componentes no processo compatriota Emoji
Figure 1. Processo de Fontes descarregáveis

O básico

Pode utilizar a funcionalidade de Fontes descarregáveis das seguintes formas:

  • via Android Studio e Google Play Services
  • Programmaticamente
  • Via a biblioteca de suporte

Utilização de fontes descarregáveis via Android Studio e Google Play Services

Pode configurar a sua aplicação para descarregar fontes utilizando o Android Studio 3.0 ou superior. Para o ajudar a começar com as características das fontes descarregáveis, pode utilizar o fornecedor de fontes dos serviços Google Play.

Nota: Um dispositivo deve ter serviços Google Play versão 11 ou superior para utilizar o fornecedor de fontes do Google Play.

  1. No Layout Editor, seleccione um TextView, e depois em Properties, seleccione fontFamily > More Fonts.
    Layout Editor
    Figure 2. Usando Layout Editor

    A janela Recursos aparece.

  2. Na lista pendente Fonte, seleccione Google Fonts.
  3. Na caixa Fontes, seleccione uma fonte.
  4. Seleccionar Criar fonte descarregável e clique OK.

    Nota: Para agrupar a fonte na sua aplicação, seleccione Add font to project.

    Layout editor
    Figure 3. Selecção da fonte da janela Recursos
  5. Android Studio gera automaticamente os ficheiros XML relevantes que são necessários para renderizar correctamente a fonte no seu app.

    Layout editor
    Figure 4. Previewing font file

Using Downloadable Fonts programmaticamente

Antes do Android 8.0 (API nível 26), a Biblioteca de Suporte 26.0 fornece suporte completo para Fontes descarregáveis. Para mais informações sobre a utilização da biblioteca de suporte, vá à secção Biblioteca de fontes descarregáveis de suporte.

Para utilizar a funcionalidade Fontes descarregáveis programática, é necessário interagir com duas classes chave:

  • android.graphics.fonts.FontRequest: Esta classe permite-lhe criar um pedido de fontes.
  • FontsContract: Esta classe permite-lhe criar um novo Typeface objecto baseado no pedido da fonte.

A sua aplicação recupera fontes do fornecedor de fontes utilizando o FontsContract API. Cada fornecedor tem o seu próprio conjunto de restrições sobre as versões Android e a linguagem de consulta que suporta. Para mais informações sobre as versões e o formato de consulta do Android, consulte a documentação do seu fornecedor.

Para descarregar uma fonte, execute os seguintes passos:

  1. Criar uma instância da classe android.graphics.fonts.FontRequest para solicitar a fonte ao fornecedor. Para criar um pedido, passar os seguintes parâmetros:
    • A autoridade do fornecedor da fonte
    • O pacote do fornecedor da fonte para verificar a identidade do fornecedor
    • A consulta da string da fonte. Para mais informações sobre formatos de consulta, consulte a documentação do seu fornecedor de fontes, tal como Google Fonts.
    • >li>Uma lista de conjuntos de hashes para os certificados, para verificar a identidade do fornecedor.

      Nota: Não há necessidade de adicionar um certificado se solicitar fontes a fornecedores pré-instalados. No entanto, deve sempre fornecer um certificado se solicitar fontes através da biblioteca de suporte.

  2. 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);

    Nota: Pode receber os valores dos parâmetros do seu fornecedor de fontes. O Android Studio preenche automaticamente estes valores para os fornecedores que suporta na sua UI.

  3. Cria uma instância do método FontsContract.FontRequestCallback class.
  4. Override the onTypefaceRetrieved() para indicar que o pedido da fonte está completo. Fornecer a fonte recuperada como o parâmetro. Pode utilizar este método para definir a fonte, conforme necessário. Por exemplo, pode definir a fonte num método TextView
  5. Override the onTypefaceRequestFailed() para receber informações sobre erros no processo de pedido da fonte. Para mais informações sobre códigos de erro, consulte o método error code constants.
  6. Chamada ao método FontsContract.requestFont() para recuperar a fonte do fornecedor da fonte. O método inicia uma verificação para determinar se a fonte existe na cache. Se a fonte não estiver disponível localmente, chama o fornecedor da fonte, recupera a fonte de forma assíncrona, e passa o resultado para a chamada de retorno. Passa os seguintes parâmetros:
    • uma instância do Context class
    • uma instância do android.graphics.fonts.FontRequest class
    • uma chamada de retorno para receber os resultados do pedido de fonte
    • um manipulador para ir buscar fontes numa linha
    • Nota: Certifique-se de que este manipulador não é o manipulador de linha da Interface de Utilizador.

O seguinte código de amostra ilustra o processo geral de fontes descarregáveis:

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 descarregar uma fonte de um fornecedor de fontes, ver a aplicação de amostra de fontes descarregáveis Java | Kotlin.

Usar Fontes descarregáveis através da biblioteca de suporte

A Biblioteca de suporte 26 fornece suporte à funcionalidade de Fontes descarregáveis em dispositivos que executam a API do Android versões 14 ou superiores. O pacote android.support.v4.provider contém FontsContractCompat e FontRequest classes para implementar a funcionalidade de fontes descarregáveis compatíveis com versões anteriores. As classes da biblioteca de apoio contêm métodos semelhantes à estrutura. O processo de descarregar fontes é também semelhante ao mencionado na secção de descarregar fontes.

Para descarregar fontes utilizando a biblioteca de suporte, importar o pacote FontsContractCompat e FontRequest classes do pacote android.support.v4.provider. Criar as instâncias destas classes em vez de FontsContract e android.graphics.fonts.FontRequest classes-quadro.

Nota: Deve fornecer um certificado quando solicitar fontes através da biblioteca de suporte. Isto é aplicável mesmo para os fornecedores de fontes pré-instalados.

Adicionar dependência da biblioteca de suporte

Para utilizar as classes FontsContractCompat e FontRequest, deve modificar as dependências de classe do seu projecto de aplicação dentro do seu ambiente de desenvolvimento.

para adicionar uma biblioteca de apoio ao seu projecto de aplicação:

  1. Abra a secção build.gradle ficheiro da sua aplicação.
  2. Adicionar a biblioteca de apoio à secção dependencies.
dependencies { ... compile "com.android.support:support-compat:28.0.0"}

Usando Fontes descarregáveis como recursos em XML

Android 8.0 (API nível 26) e Biblioteca de suporte 26 oferecem uma forma mais rápida e conveniente de declarar uma fonte personalizada como um recurso no layout XML. Isto significa que não há necessidade de agrupar a fonte como um recurso. É possível definir uma fonte personalizada para todo o seu tema, o que acelera a usabilidade para múltiplos pesos e estilos, tais como Negrito, Médio, ou Leve, quando fornecida.

  1. Criar um novo ficheiro XML na pasta res/font.
  2. Adicionar <font-family> elemento raiz e definir os atributos relacionados com o tipo de letra como mostrado na seguinte amostra de ficheiro XML:
  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. Refer ao ficheiro como @font/font_file_name no ficheiro XML de layout. Também pode utilizar o método getFont() para recuperar o ficheiro de forma programática. Por exemplo, getFont(R.font.font_file_name).

Fonte de pré-declaração no manifesto

Inflação e recuperação de recursos são tarefas síncronas. Por defeito, a primeira tentativa de recuperação de fontes desencadeia um pedido ao fornecedor de fontes, e por isso aumenta o primeiro tempo de disposição. Para evitar o atraso, pode pré-declarar as fontes que precisam de ser recuperadas no seu manifesto. Depois de o sistema recuperar a fonte do fornecedor, esta fica imediatamente disponível. Se a recuperação da fonte demorar mais tempo do que o esperado, o sistema aborta o processo de busca e utiliza a fonte padrão.

Para pré-declarar as fontes no manifesto, execute os seguintes passos:

  1. Criar uma matriz de recursos em res/values/arrays.xml e declare as Fontes descarregáveis que pretende pré-declarar.
  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. Utiliza uma tag meta-data para declarar a matriz de recursos no seu manifesto.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

Adicionar certificados

Quando um fornecedor de fontes não estiver pré-instalado ou se estiver a utilizar a biblioteca de suporte, deve declarar os certificados com os quais o fornecedor de fontes está assinado. O sistema utiliza os certificados para verificar a identidade do fornecedor de fontes.

Nota: o Android Studio pode preencher automaticamente os valores para o fornecedor de serviços Google Play se utilizar a ferramenta de selecção de fontes no Android Studio. Para mais informações sobre a utilização do Android Studio para descarregar fontes, vá para a secção Utilizar fontes descarregáveis via Android Studio e serviços Google Play.

Realizar os seguintes passos para adicionar certificados:

  1. Criar uma matriz de caracteres com os detalhes do certificado. Para mais informações sobre os detalhes do certificado, consulte a documentação do seu fornecedor de fontes.
  2. <?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
  3. Configurar o atributo fontProviderCerts ao array.
  4. android:fontProviderCerts="@array/certs"

    Nota: Se o fornecedor tiver mais do que um conjunto de certs, pode definir um conjunto de matrizes de cordas.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *