Fuentes descargables

  • por

Android 8.0 (nivel de API 26) y Android Support Library 26 introducen la compatibilidad con las API para solicitar fuentes a una aplicación del proveedor en lugar de incluir archivos en el APK o dejar que el APK descargue las fuentes. La función está disponible en los dispositivos que ejecutan las versiones 14 y superiores de la API de Android a través de la Support Library 26.

La función de fuentes descargables ofrece los siguientes beneficios:

  • Reduce el tamaño del APK
  • Aumenta la tasa de éxito de la instalación de la app
  • Mejora la salud general del sistema ya que varios APK pueden compartir la misma fuente a través de un proveedor. Esto ahorra a los usuarios datos celulares, memoria del teléfono y espacio en el disco. En este modelo, la fuente se obtiene a través de la red cuando se necesita.
    • Consulte los siguientes recursos relacionados:

      • La app de ejemplo Downloadable Fonts Java | Kotlin
        • ¿Cómo funciona Downloadable Fonts?

          Un proveedor de fuentes es una aplicación que recupera fuentes y las almacena en caché localmente para que otras apps puedan solicitar y compartir fuentes. La figura 1 ilustra el proceso.

          Componentes principales en el proceso de compatción de Emoji
          Figura 1. Proceso de fuentes descargables

          Los fundamentos

          Puedes utilizar la función de fuentes descargables de las siguientes maneras:

          • a través de Android Studio y los servicios de Google Play
          • Programáticamente
          • a través de la biblioteca de soporte

          Utilizando las fuentes descargables a través de Android Studio y los servicios de Google Play

          Puede configurar su aplicación para descargar fuentes utilizando Android Studio 3.0 o superior. Para ayudarte a empezar con las funciones de las fuentes descargables, puedes utilizar el proveedor de fuentes de los servicios de Google Play.

          Nota: Un dispositivo debe tener la versión 11 o superior de los servicios de Google Play para utilizar el proveedor de Google Fonts.

  1. En el Editor de diseño, seleccione un TextView y, a continuación, en Propiedades, seleccione fontFamily > Más fuentes.
    Editor de diseño
    Figura 2. Uso del editor de diseño

    Aparece la ventana Recursos.

  2. En la lista desplegable Fuente, seleccione Google Fonts.
  3. En el cuadro Fuentes, seleccione una fuente.
  4. Seleccione Crear fuente descargable y haga clic en Aceptar.

    Nota: para agrupar la fuente en tu aplicación, selecciona Añadir fuente al proyecto.

    Editor de diseño
    Figura 3. Seleccionando la fuente en la ventana de recursos

    Android Studio genera automáticamente los archivos XML pertinentes que son necesarios para renderizar la fuente correctamente en tu aplicación.

    Editor de diseño
    Figura 4. Previsualización del archivo de fuentes

Utilización de fuentes descargables mediante programación

Antes de Android 8.0 (nivel de API 26), la biblioteca de soporte 26.0 proporciona compatibilidad total con las fuentes descargables. Para obtener más información sobre el uso de la biblioteca de soporte, vaya a la sección Biblioteca de soporte de fuentes descargables.

Para utilizar la función de Fuentes Descargables de forma programada, necesita interactuar con dos clases clave:

  • android.graphics.fonts.FontRequest: Esta clase le permite crear una solicitud de fuentes.
  • FontsContract: Esta clase te permite crear un nuevo objeto Typeface basado en la solicitud de fuentes.
  • Tu aplicación recupera las fuentes del proveedor de fuentes utilizando la API FontsContract. Cada proveedor tiene su propio conjunto de restricciones sobre las versiones de Android y el lenguaje de consulta que admite. Para obtener más información sobre las versiones de Android y el formato de consulta, consulte la documentación de su proveedor.

    Para descargar una fuente, realice los siguientes pasos:

  1. Cree una instancia de la clase android.graphics.fonts.FontRequest para solicitar la fuente al proveedor. Para crear una solicitud, pase los siguientes parámetros:
    • La autoridad del proveedor de fuentes
    • El paquete del proveedor de fuentes para verificar la identidad del proveedor
    • La cadena de consulta de la fuente. Para obtener más información sobre los formatos de consulta, consulte la documentación de su proveedor de fuentes, como Google Fonts.
    • Una lista de conjuntos de hashes de los certificados para verificar la identidad del proveedor.

      Nota: no es necesario añadir un certificado si solicita fuentes de proveedores preinstalados. Sin embargo, siempre debe proporcionar un certificado si solicita fuentes a través de la biblioteca de soporte.

    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: Puedes recibir los valores de los parámetros de tu proveedor de fuentes. Android Studio rellena automáticamente estos valores para los proveedores que admite en su interfaz de usuario.

  2. Cree una instancia de la clase FontsContract.FontRequestCallback.
  3. Sustituya el método onTypefaceRetrieved() para indicar que la solicitud de fuente se ha completado. Proporcione la fuente recuperada como parámetro. Puede utilizar este método para establecer la fuente, según sea necesario. Por ejemplo, puede establecer la fuente en un TextView
  4. Sustituya el método onTypefaceRequestFailed() para recibir información sobre los errores en el proceso de solicitud de fuentes. Para obtener más información sobre los códigos de error, consulte el error code constants.
  5. Llame al método FontsContract.requestFont() para recuperar la fuente del proveedor de fuentes. El método inicia una comprobación para determinar si la fuente existe en la caché. Si la fuente no está disponible localmente, llama al proveedor de fuentes, recupera la fuente de forma asíncrona y pasa el resultado a la llamada de retorno. Pasa los siguientes parámetros:
    • una instancia de la clase Context
    • una instancia de la clase android.graphics.fonts.FontRequest
    • una devolución de llamada para recibir los resultados de la solicitud de fuentes
    • un manejador para obtener fuentes en un hilo
    • Nota: asegúrese de que este manejador no es el manejador de hilo de la interfaz de usuario.

  6. El siguiente código de ejemplo ilustra el proceso general de Fuentes Descargables:

    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 obtener más información sobre cómo descargar una fuente de un proveedor de fuentes, consulte la aplicación de ejemplo Downloadable Fonts Java | Kotlin.

    Utilización de Downloadable Fonts a través de la biblioteca de soporte

    La biblioteca de soporte 26 proporciona soporte a la función Downloadable Fonts en dispositivos que ejecutan las versiones 14 o superiores de la API de Android. El paquete android.support.v4.provider contiene las clases FontsContractCompat y FontRequest para implementar el soporte de la función Downloadable Fonts compatible con versiones anteriores. Las clases de la biblioteca de soporte contienen métodos similares a los del framework. El proceso de descarga de fuentes también es similar al mencionado en la sección Descarga de fuentes.

    Para descargar fuentes utilizando la biblioteca de soporte, importe las clases FontsContractCompat y FontRequest del paquete android.support.v4.provider. Cree las instancias de estas clases en lugar de las clases FontsContract y android.graphics.fonts.FontRequest del framework.

    Nota: debe proporcionar un certificado cuando solicite fuentes a través de la biblioteca de soporte. Esto es aplicable incluso para los proveedores de fuentes preinstalados.

    Añadir dependencia de la biblioteca de soporte

    Para utilizar las clases FontsContractCompat y FontRequest, debes modificar las dependencias del classpath de tu proyecto de app dentro de tu entorno de desarrollo.

    Para añadir una biblioteca de apoyo a su proyecto de aplicación:

    1. Abra el archivo build.gradle de su aplicación.
    2. Añada la biblioteca de soporte a la sección dependencies.
    dependencies { ... compile "com.android.support:support-compat:28.0.0"}

    Utilización de fuentes descargables como recursos en XML

    Android 8.0 (nivel de API 26) y la biblioteca de soporte 26 ofrecen una forma más rápida y cómoda de declarar una fuente personalizada como recurso en el diseño XML. Esto significa que no es necesario agrupar la fuente como un recurso. Puede definir una fuente personalizada para todo su tema, lo que acelera la usabilidad para múltiples pesos y estilos, como Negrita, Media o Ligera, cuando se proporcionan.

    1. Cree un nuevo archivo XML en la carpeta res/font.
    2. Añada el elemento raíz <font-family> y establezca los atributos relacionados con la fuente como se muestra en el siguiente archivo XML de ejemplo:
    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. Haga referencia al archivo como @font/nombre_del_archivo_de_la_fuente en el archivo XML de diseño. También puede utilizar el método getFont() para recuperar el archivo mediante programación. Por ejemplo, getFont(R.font.font_file_name).

    Pre-declaración de fuentes en el manifiesto

    La inflación del diseño y la recuperación de recursos son tareas sincrónicas. Por defecto, el primer intento de recuperar las fuentes desencadena una petición al proveedor de fuentes, y por lo tanto aumenta el primer tiempo de maquetación. Para evitar el retraso, puede declarar previamente las fuentes que necesitan ser recuperadas en su manifiesto. Después de que el sistema recupere la fuente del proveedor, estará disponible inmediatamente. Si la recuperación de la fuente tarda más de lo esperado, el sistema aborta el proceso de obtención y utiliza la fuente predeterminada.

    Para predefinir las fuentes en el manifiesto, realice los siguientes pasos:

    1. Cree una matriz de recursos en res/values/arrays.xml y declare las fuentes descargables que desea preobtener.
    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. Usa una etiqueta meta-data para declarar la matriz de recursos en tu manifiesto.
    4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

    Añadir certificados

    Cuando un proveedor de fuentes no está preinstalado o si está utilizando la biblioteca de soporte, debe declarar los certificados con los que está firmado el proveedor de fuentes. El sistema utiliza los certificados para verificar la identidad del proveedor de fuentes.

    Nota: Android Studio puede rellenar automáticamente los valores del proveedor de servicios de Google Play si utiliza la herramienta de selección de fuentes en Android Studio. Para obtener más información sobre el uso de Android Studio para descargar fuentes, vaya a la sección Uso de fuentes descargables a través de Android Studio y servicios de Google Play.

    Realice los siguientes pasos para añadir certificados:

    1. Cree una matriz de cadenas con los detalles del certificado. Para obtener más información sobre los detalles del certificado, consulte la documentación de su proveedor de fuentes.
    2. <?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
    3. Configure el atributo fontProviderCerts en el array.
    4. android:fontProviderCerts="@array/certs"

      Nota: Si el proveedor tiene más de un conjunto de certificados, puedes definir un array de arrays de cadenas.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *