Fontes

Visão geral

A partir do nível 26 da API, o SDK do Android permite que as fontes sejam tratadas como recursos, assim como layouts ou desenhos. A Biblioteca de Suporte do Android 26 NuGet fará o backport das novas APIs de fonte para os aplicativos que visam o nível de API 14 ou superior.

Depois de direcionar a API 26 ou instalar a Biblioteca de Suporte do Android v26, há duas maneiras de usar fontes em um aplicativo Android:

  1. Empacote a fonte como um recurso Android – isso garante que a fonte esteja sempre disponível para o aplicativo, mas aumentará o tamanho do APK.
  2. Baixe as fontes – O Android também suporta o download de uma fonte de um provedor de fontes. O provedor de fontes verifica se a fonte já está no dispositivo. Se necessário, a fonte será baixada e armazenada em cache no dispositivo. Essa fonte pode ser compartilhada entre vários aplicativos.

Fontes semelhantes (ou uma fonte que pode ter vários estilos diferentes) podem ser agrupadas em famílias de fontes. Isso permite que os desenvolvedores especifiquem certos atributos da fonte, como seu peso, e o Android selecionará automaticamente a fonte apropriada da família de fontes.

A Biblioteca de Suporte do Android v26 fará a backport do suporte para fontes para o nível 26 da API. Ao direcionar os níveis de API mais antigos, é necessário declarar o app namespace XML e nomear os vários atributos de fonte usando o android: namespace e o app: namespace. Se apenas o namespace for usado, as fontes não serão exibidas em dispositivos que executam API android: nível 25 ou menos. Por exemplo, este trecho XML declara um novo recurso da família de fontes que funcionará no nível de API 14 e superior:

<?xml version="1.0" encoding="utf-8"?>
<font-family
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

     <font  android:font="@font/sourcesanspro_regular"
            android:fontStyle="normal"
            android:fontWeight="400"
            app:font="@font/sourcesanspro_regular"
            app:fontStyle="normal"
            app:fontWeight="400" />

</font-family>

Contanto que as fontes sejam fornecidas a um aplicativo Android de maneira adequada, elas podem ser aplicadas a um widget de interface do usuário definindo o fontFamily atributo. Por exemplo, o trecho a seguir demonstra como exibir uma fonte em um TextView:

<TextView
    android:text="The quick brown fox jumped over the lazy dog."
    android:fontFamily="@font/sourcesanspro_regular"
    app:fontFamily="@font/sourcesanspro_regular"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Este guia discutirá primeiro como usar fontes como um recurso do Android e, em seguida, passará a discutir como baixar fontes em tempo de execução.

Fontes como um recurso

Empacotar uma fonte em um APK Android garante que ela esteja sempre disponível para o aplicativo. Um arquivo de fonte (um arquivo . TTF ou um . OTF) é adicionado a um aplicativo Xamarin.Android como qualquer outro recurso, copiando arquivos para um subdiretório na pasta Recursos de um projeto Xamarin.Android. Os recursos de fontes são mantidos em um subdiretório de fontes da pasta Recursos do projeto.

Observação

As fontes devem ter uma Build Action do AndroidResource ou não serão empacotadas no APK final. A ação de compilação deve ser definida automaticamente pelo IDE.

Quando há muitos arquivos de fonte semelhantes (por exemplo, a mesma fonte com pesos ou estilos diferentes), é possível agrupá-los em uma família de fontes.

Famílias de fontes

Uma família de fontes é um conjunto de fontes que têm pesos e estilos diferentes. Por exemplo, pode haver arquivos de fonte separados para fontes em negrito ou itálico. A família de fontes é definida por font elementos em um arquivo XML que é mantido no diretório Resources/source . Cada família de fontes deve ter seu próprio arquivo XML.

Para criar uma família de fontes, primeiro adicione todas as fontes à pasta Recursos/fontes . Em seguida, crie um novo arquivo XML na pasta de fontes para a família de fontes. O nome do arquivo XML não tem afinidade ou relação com as fontes que estão sendo referenciadas; o arquivo de recurso pode ser qualquer nome de arquivo de recurso legal do Android. Esse arquivo XML terá um elemento raiz font-family que contém um ou mais font elementos. Cada font elemento declara os atributos de uma fonte.

O XML a seguir é um exemplo de uma família de fontes para a fonte Sources Sans Pro que define muitos pesos de fonte diferentes. Isso é salvo como arquivo na pasta Recursos/fonte chamada sourcesanspro.xml:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto">
    <font android:font="@font/sourcesanspro_regular"
          android:fontStyle="normal"
          android:fontWeight="400"
          app:font="@font/sourcesanspro_regular"
          app:fontStyle="normal"
          app:fontWeight="400" />
    <font android:font="@font/sourcesanspro_bold"
          android:fontStyle="normal"
          android:fontWeight="800"
          app:font="@font/sourcesanspro_bold"
          app:fontStyle="normal"
          app:fontWeight="800" />
    <font android:font="@font/sourcesanspro_italic"
          android:fontStyle="italic"
          android:fontWeight="400"
          app:font="@font/sourcesanspro_italic"
          app:fontStyle="italic"
          app:fontWeight="400" />
</font-family>

O fontStyle atributo tem dois valores possíveis:

  • normal – uma fonte normal
  • itálico – uma fonte em itálico

O fontWeight atributo corresponde ao atributo CSS font-weight e refere-se à espessura da fonte. Este é um valor no intervalo de 100 - 900. A lista a seguir descreve os valores comuns de peso da fonte e seu nome:

  • Fino – 100
  • Luz Extra – 200
  • Leve – 300
  • Normal – 400
  • Médio – 500
  • Semi Negrito – 600
  • Ousado – 700
  • Extra Ousado – 800
  • Preto – 900

Depois que uma família de fontes for definida, ela poderá ser usada declarativamente definindo os fontFamilyatributos , textStylee fontWeight no arquivo de layout. Por exemplo, o seguinte trecho XML define uma fonte de peso 600 (normal) e um estilo de texto em itálico:

<TextView
    android:text="Sans Source Pro semi-bold italic, 600 weight, italic"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/sourcesanspro"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_horizontal"
    android:fontWeight="600"
    android:textStyle="italic"
    />

Atribuindo fontes programaticamente

As fontes podem ser definidas programaticamente usando o Resources.GetFont método para recuperar um Typeface objeto. Muitos modos de exibição têm uma TypeFace propriedade que pode ser usada para atribuir a fonte ao widget. Este trecho de código mostra como definir programaticamente a fonte em um TextView:

Android.Graphics.Typeface typeface = this.Resources.GetFont(Resource.Font.caveat_regular);
textView1.Typeface = typeface;
textView1.Text = "Changed the font";

O GetFont método carregará automaticamente a primeira fonte dentro de uma família de fontes. Para carregar uma fonte que corresponda a um estilo específico, use o Typeface.Create método. Esse método tentará carregar uma fonte que corresponda ao estilo especificado. Como exemplo, esse trecho tentará carregar um objeto em negrito Typeface de uma família de fontes definida em Recursos/fontes:

var typeface = Typeface.Create("<FONT FAMILY NAME>", Android.Graphics.TypefaceStyle.Bold);
textView1.Typeface = typeface;

Baixando fontes

Em vez de empacotar fontes como um recurso de aplicativo, o Android pode baixar fontes de uma fonte remota. Isso terá o efeito desejável de reduzir o tamanho do APK.

As fontes são baixadas com a ajuda de um provedor de fontes. Este é um provedor de conteúdo especializado que gerencia o download e o armazenamento em cache de fontes para todos os aplicativos no dispositivo. O Android 8.0 inclui um provedor de fontes para baixar fontes do Repositório de fontes do Google. Esse provedor de fonte padrão é portado para o nível 14 da API com a Biblioteca de Suporte do Android v26.

Quando um aplicativo faz uma solicitação para uma fonte, o provedor de fonte primeiro verificará se a fonte já está no dispositivo. Caso contrário, ele tentará baixar a fonte. Se a fonte não puder ser baixada, o Android usará a fonte padrão do sistema. Uma vez que a fonte foi baixada, ela está disponível para todos os aplicativos no dispositivo, não apenas para o aplicativo que fez a solicitação inicial.

Quando uma solicitação é feita para baixar uma fonte, o aplicativo não consulta diretamente o provedor de fonte. Em vez disso, os aplicativos usarão uma instância da FontsContract API (ou se FontsContractCompat a Biblioteca de Suporte 26 estiver sendo usada).

O Android 8.0 suporta o download de fontes de duas maneiras diferentes:

  1. Declare Downloadable Fonts as a Resource – Um aplicativo pode declarar fontes baixáveis para Android por meio de arquivos de recursos XML. Esses arquivos conterão todos os metadados que o Android precisa para baixar as fontes de forma assíncrona quando o aplicativo for iniciado e armazená-las em cache no dispositivo.
  2. Programaticamente – APIs no nível 26 da API do Android permitem que um aplicativo baixe as fontes programaticamente, enquanto o aplicativo está em execução. Os aplicativos criarão um FontRequest objeto para uma determinada fonte e passarão esse objeto para a FontsContract classe. O FontsContract pega o FontRequest e recupera a fonte de um provedor de fontes. O Android baixará a fonte de forma síncrona. Um exemplo de criação de um FontRequest será mostrado posteriormente neste guia.

Independentemente da abordagem usada, os arquivos de recursos que devem ser adicionados ao aplicativo Xamarin.Android antes que as fontes possam ser baixadas. Primeiro, a(s) fonte(s) deve(m) ser declarada (s) em um arquivo XML no diretório Resources/font como parte de uma família de fontes. Este trecho é um exemplo de como baixar fontes da coleção Google Fonts Open Source usando o provedor de fontes padrão que vem com o Android 8.0 (ou Biblioteca de suporte v26):

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:fontProviderAuthority="com.google.android.gms.fonts"
             android:fontProviderPackage="com.google.android.gms"
             android:fontProviderQuery="VT323"
             android:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
             app:fontProviderAuthority="com.google.android.gms.fonts"
             app:fontProviderPackage="com.google.android.gms"
             app:fontProviderQuery="VT323"
             app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
>
</font-family>

O font-family elemento contém os seguintes atributos, declarando as informações que o Android requer para baixar as fontes:

  1. fontProviderAuthority – A autoridade do Provedor de Fontes a ser usada para a solicitação.
  2. fontPackage – O pacote para o provedor de fontes a ser usado para a solicitação. Isso é usado para verificar a identidade do provedor.
  3. fontQuery – Esta é uma cadeia de caracteres que ajudará o provedor de fontes a localizar a fonte solicitada. Os detalhes sobre a consulta de fonte são específicos para o provedor de fonte. A QueryBuilder classe no aplicativo de exemplo Fontes para download fornece algumas informações sobre o formato de consulta para fontes da Coleção de código aberto do Google Fonts.
  4. fontProviderCerts – Uma matriz de recursos com a lista de conjuntos de hashes para os certificados com os quais o provedor deve ser assinado.

Uma vez que as fontes são definidas, pode ser necessário fornecer informações sobre os certificados de fonte envolvidos com o download.

Certificados de fonte

Se o provedor de fontes não estiver pré-instalado no dispositivo ou se o aplicativo estiver usando a biblioteca, o Xamarin.Android.Support.Compat Android exigirá os certificados de segurança do provedor de fontes. Esses certificados serão listados em um arquivo de recurso de matriz que é mantido no diretório Resources/values .

Por exemplo, o XML a seguir é denominado Recursos/valores/fonts_cert.xml e armazena os certificados para o provedor de fontes do Google:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="com_google_android_gms_fonts_certs">
        <item>@array/com_google_android_gms_fonts_certs_dev</item>
        <item>@array/com_google_android_gms_fonts_certs_prod</item>
    </array>
    <string-array name="com_google_android_gms_fonts_certs_dev">
        <item>
            MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
        </item>
    </string-array>
    <string-array name="com_google_android_gms_fonts_certs_prod">
        <item>
            MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
        </item>
    </string-array>
</resources>

Com esses arquivos de recursos no lugar, o aplicativo é capaz de baixar as fontes.

Declarando fontes para download como recursos

Ao listar as fontes para download no AndroidManifest.XML, o Android baixará as fontes de forma assíncrona quando o aplicativo for iniciado pela primeira vez. As fontes em si são listadas em um arquivo de recurso de matriz, semelhante a este:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="downloadable_fonts" translatable="false">
        <item>@font/vt323</item>
    </array>
</resources>

Para baixar essas fontes, elas precisam ser declaradas em AndroidManifest.XML adicionando meta-data como um filho do application elemento . Por exemplo, se as fontes para download forem declaradas em um arquivo de recurso em Resources/values/downloadable_fonts.xml, esse trecho terá que ser adicionado ao manifesto:

<meta-data android:name="downloadable_fonts" android:resource="@array/downloadable_fonts" />

Baixando uma fonte com as APIs de fonte

É possível baixar programaticamente uma fonte instanciando um FontRequest objeto e passando-o para o FontContractCompat.RequestFont método. O FontContractCompat.RequestFont método primeiro verificará se a fonte existe no dispositivo e, se necessário, consultará de forma assíncrona o provedor de fonte e tentará baixar a fonte para o aplicativo. Se FontRequest não for possível baixar a fonte, o Android usará a fonte padrão do sistema.

Um FontRequest objeto contém informações que serão usadas pelo provedor de fonte para localizar e baixar uma fonte. A FontRequest requer quatro informações:

  1. Autoridade do Provedor de Fontes – A autoridade do Provedor de Fontes a ser usada para a solicitação.
  2. Pacote de fontes – O pacote do provedor de fontes a ser usado para a solicitação. Isso é usado para verificar a identidade do provedor.
  3. Consulta de fonte – Esta é uma cadeia de caracteres que ajudará o provedor de fonte a localizar a fonte solicitada. Os detalhes sobre a consulta de fonte são específicos para o provedor de fonte. Os detalhes da cadeia de caracteres são específicos para o provedor de fonte. A QueryBuilder classe no aplicativo de exemplo Fontes para download fornece algumas informações sobre o formato de consulta para fontes da Coleção de código aberto do Google Fonts.
  4. Certificados de provedor de fonte – Uma matriz de recursos com a lista de conjuntos de hashes para os certificados com os quais o provedor deve ser assinado.

Este trecho é um exemplo de instanciação de um novo FontRequest objeto:

FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms", <FontToDownload>, Resource.Array.com_google_android_gms_fonts_certs);

No trecho FontToDownload anterior há uma consulta que ajudará a fonte da coleção Google Fonts Open Source.

Antes de passar o FontRequest para o FontContractCompat.RequestFont método, há dois objetos que devem ser criados:

  • FontsContractCompat.FontRequestCallback – Esta é uma classe abstrata que deve ser estendida. É um retorno de chamada que será invocado quando RequestFont terminar. Um aplicativo Xamarin.Android deve subclasse FontsContractCompat.FontRequestCallback e substituir o OnTypefaceRequestFailed e OnTypefaceRetrieved, fornecendo as ações a serem executadas quando o download falhar ou for bem-sucedido, respectivamente.
  • Handler – Este é um Handler que será usado por RequestFont para baixar a fonte em um tópico, se necessário. As fontes não devem ser baixadas no thread da interface do usuário.

Esse trecho é um exemplo de uma classe C# que fará o download assíncrono de uma fonte da coleção Open Source do Google Fonts. Ele implementa a FontRequestCallback interface e gera um evento C# quando FontRequest terminar.

public class FontDownloadHelper : FontsContractCompat.FontRequestCallback
{
    // A very simple font query; replace as necessary
    public static readonly String FontToDownload = "Courgette";

    Android.OS.Handler Handler = null;

    public event EventHandler<FontDownloadEventArg> FontDownloaded = delegate
    {
        // just an empty delegate to avoid null reference exceptions.  
    };

    public void DownloadFonts(Context context)
    {
        FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms",FontToDownload , Resource.Array.com_google_android_gms_fonts_certs);
        FontsContractCompat.RequestFont(context, request, this, GetHandlerThreadHandler());
    }

    public override void OnTypefaceRequestFailed(int reason)
    {
        base.OnTypefaceRequestFailed(reason);
        FontDownloaded(this, new FontDownloadEventArg(null));
    }

    public override void OnTypefaceRetrieved(Android.Graphics.Typeface typeface)
    {
        base.OnTypefaceRetrieved(typeface);
        FontDownloaded(this, new FontDownloadEventArg(typeface));
    }

    Handler GetHandlerThreadHandler()
    {
        if (Handler == null)
        {
            HandlerThread handlerThread = new HandlerThread("fonts");
            handlerThread.Start();
            Handler = new Handler(handlerThread.Looper);
        }
        return Handler;
    }
}

public class FontDownloadEventArg : EventArgs
{
    public FontDownloadEventArg(Android.Graphics.Typeface typeface)
    {
        Typeface = typeface;
    }
    public Android.Graphics.Typeface Typeface { get; private set; }
    public bool RequestFailed
    {
        get
        {
            return Typeface != null;
        }
    }
}

Para usar esse auxiliar, um novo FontDownloadHelper é criado e um manipulador de eventos é atribuído:

var fontHelper = new FontDownloadHelper();

fontHelper.FontDownloaded += (object sender, FontDownloadEventArg e) =>
{
    //React to the request
};
fontHelper.DownloadFonts(this); // this is an Android Context instance.

Resumo

Este guia discutiu as novas APIs no Android 8.0 para oferecer suporte a fontes para download e fontes como recursos. Ele discutiu como incorporar fontes existentes em um APK e usá-las em um layout. Ele também discutiu como o Android 8.0 suporta o download de fontes de um provedor de fontes, programaticamente ou declarando os metadados de fonte em arquivos de recursos.