Fontes em XML

O Android 8.0 (API de nível 26) introduz um novo recurso que permite usar fontes como recursos: o Fontes em XML. Você pode adicionar o arquivo font na pasta res/font/ para agrupar fontes como recursos. Essas fontes são compiladas no arquivo R e ficam disponíveis automaticamente no Android Studio. Você pode acessar os recursos de fontes com a ajuda de um novo tipo de recurso, font. Por exemplo, para acessar um recurso de fonte, use @font/myfont ou R.font.myfont.

Para usar o recurso "Fontes em XML" em dispositivos com Android 4.1 (API de nível 16) ou versões mais recentes, use a Biblioteca de Suporte 26. Para ver mais informações sobre como usar a Biblioteca de Suporte, consulte a seção Usar a Biblioteca de Suporte.

Para adicionar fontes como recursos, siga as seguintes etapas no Android Studio:

  1. Clique com o botão direito do mouse na pasta res e acesse New > Android resource directory.

    A janela New Resource Directory será exibida.

  2. Na lista Resource type, selecione font e clique em OK.

    Observação: o nome do diretório de recursos precisa ser font.

    Adicionar o diretório de recursos de fontes

    Figura 1. Adicionar o diretório de recursos de fontes.

  3. Adicione seus arquivos de fontes na pasta font.

    A estrutura de pasta abaixo gera R.font.dancing_script, R.font.lobster e R.font.typo_graphica.

    Adicionar os arquivos de fontes no diretório de recursos

    Figura 2. Adicionar os arquivos de fontes no diretório de recursos.

  4. Clique duas vezes em um arquivo de fontes para visualizar as fontes do arquivo no editor. Visualizar o arquivo de fontes

    Figura 3. Visualizar o arquivo de fontes

Criar uma família de fontes

Uma família de fontes é um conjunto de arquivos de fontes com detalhes de estilo e peso. No Android, você pode criar uma nova família de fontes como um recurso XML e acessá-la como uma única unidade, em vez de referenciar cada estilo e peso como recursos separados. Ao fazer isso, o sistema pode selecionar a fonte correta com base no estilo de texto que você está tentando usar.

Para criar uma família de fontes, siga as seguintes etapas no Android Studio:

  1. Clique com o botão direito do mouse na pasta font e acesse New > Font resource file. A janela New Resource file será exibida.
  2. Digite o nome do arquivo e clique em OK. O novo XML de recurso de fontes será aberto no editor.
  3. Inclua cada arquivo de fonte, estilo e atributo de peso no elemento <font>. O XML a seguir ilustra como adicionar atributos relacionados à fonte no XML de recurso de fontes:
    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android">
        <font
            android:fontStyle="normal"
            android:fontWeight="400"
            android:font="@font/lobster_regular" />
        <font
            android:fontStyle="italic"
            android:fontWeight="400"
            android:font="@font/lobster_italic" />
    </font-family>
    

Usar fontes em layouts XML

Use suas fontes, de um único arquivo de fontes ou de uma família de fontes, em um objeto TextView ou em estilos. Para adicionar fontes à TextView ou em estilos, use o atributo fontFamily.

Observação: quando você usa uma família de fontes, a TextView é alternada por conta própria, conforme necessário, para usar os arquivos de fonte dessa família.

Adicionar fontes a um TextVieW

Para definir uma fonte para a TextView, siga um dos seguintes procedimentos:

  • No arquivo XML de layout, defina o atributo fontFamily para o arquivo de fontes que você quer acessar.
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
    
  • Abra a janela Properties para definir a fonte como TextView.
    1. Selecione uma visualização para abrir a janela Properties.

      Observação: a janela Properties só fica disponível quando o editor de design está aberto. Selecione a guia Design na parte inferior da janela.

    2. Expanda a propriedade textAppearance e, em seguida, selecione a fonte da lista fontFamily.
    3. Selecionar a fonte em "Properties"

      Figura 4. Selecionar a fonte da janela "Properties".

A visualização de layout do Android Studio, exibida no painel mais à direita da Figura 5, permite que você veja a fonte definida na TextView.

Visualizar fontes na visualização de layout

Figura 5. Visualizar fontes na visualização de layout.

Adicionar fontes ao estilo

Abra styles.xml e defina o atributo fontFamily para o arquivo de fontes que você quer acessar.

  • <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/lobster</item>
    </style>
    
  • Usar fontes de forma programática

    Para recuperar fontes de forma programática, chame o método getFont(int) e informe o identificador de recurso da fonte que você quer recuperar. Este método retorna um objeto Typeface. Embora o sistema escolha o melhor estilo para você a partir das informações de fontes, você pode usar o método setTypeface(android.graphics.Typeface, int) para definir typeface com estilos específicos.

    Observação: o TextView já faz isso por você.

    Kotlin

    val typeface = resources.getFont(R.font.myfont)
    textView.typeface = typeface
    

    Java

    Typeface typeface = getResources().getFont(R.font.myfont);
    textView.setTypeface(typeface);
    

    Usar a Biblioteca de Suporte

    A Biblioteca de Suporte 26.0 oferece compatibilidade com o recurso "Fontes em XML" em dispositivos com o Android 4.1 (API de nível 16) ou versões mais recentes.

    Observação: ao declarar famílias de fontes no layout XML por meio da Biblioteca de Suporte, use o namespace do app para garantir o carregamento das fontes.

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

    Para recuperar fontes de forma programática, chame o método ResourceCompat.getFont(Context, int) e forneça uma instância do Contexto e o identificador de recursos.

    Kotlin

    val typeface = ResourcesCompat.getFont(context, R.font.myfont)
    

    Java

    Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);