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.
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.
- No Layout Editor, seleccione um TextView, e depois em Properties, seleccione fontFamily > More Fonts.
A janela Recursos aparece.
- Na lista pendente Fonte, seleccione Google Fonts.
- Na caixa Fontes, seleccione uma fonte.
- Seleccionar Criar fonte descarregável e clique OK.
Nota: Para agrupar a fonte na sua aplicação, seleccione Add font to project.
Android Studio gera automaticamente os ficheiros XML relevantes que são necessários para renderizar correctamente a fonte no seu app.
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 novoTypeface
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:
- 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.
- Cria uma instância do método
FontsContract.FontRequestCallback
class. - 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étodoTextView
- 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étodoerror code constants
. - 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.
- uma instância do
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.
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:
- Abra a secção
build.gradle
ficheiro da sua aplicação. - 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.
- Criar um novo ficheiro XML na pasta
res/font
. - Adicionar
<font-family>
elemento raiz e definir os atributos relacionados com o tipo de letra como mostrado na seguinte amostra de ficheiro XML: - 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)
.
<?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>
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:
- Criar uma matriz de recursos em
res/values/arrays.xml
e declare as Fontes descarregáveis que pretende pré-declarar. - Utiliza uma tag
meta-data
para declarar a matriz de recursos no seu 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 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:
- 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.
- Configurar o atributo
fontProviderCerts
ao array.
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
android:fontProviderCerts="@array/certs"
Nota: Se o fornecedor tiver mais do que um conjunto de certs, pode definir um conjunto de matrizes de cordas.