La función Fuentes para descargar permite que las APIs soliciten fuentes de una aplicación del proveedor en lugar de agrupar archivos en la app o permitir que esta descargue fuentes La función Fuentes para descargar está disponible en dispositivos con la API 14 de Android y versiones posteriores a través de la biblioteca de AndroidX Core.
La función Fuentes para descargar ofrece los siguientes beneficios:
- Reduce el tamaño de la app y, por lo tanto, aumenta la tasa de éxito de su instalación.
- Mejora el estado general del sistema, ya que varias aplicaciones pueden compartir la misma fuente a través de una proveedor. Esto permite que los usuarios ahorren datos móviles, memoria del teléfono y espacio en el disco. En este modelo, se recupera la fuente a través de la red cuando es necesario.
¿Cómo funciona Fuentes para descargar?
Un proveedor de fuentes es una aplicación que recupera fuentes y las almacena en caché localmente para que otras aplicaciones puedan solicitar y compartir fuentes. En la siguiente figura, se ilustra el proceso.
Conceptos básicos
Puedes usar la función Fuentes para descargar de las siguientes maneras, que se analizan en detalle. en secciones posteriores:
- Cómo usar Android Studio y los Servicios de Google Play
- De manera programática
- Cómo usar la biblioteca de AndroidX Core
Cómo usar la función Fuentes para descargar con Android Studio y Servicios de Google Play
Puedes configurar tu aplicación para que descargue fuentes con Android Studio 3.0 o versiones posteriores. Para ayudarte comienzas a usar la función Fuentes para descargar, puedes usar el proveedor de fuentes de Google Play de Google Cloud.
- En el editor de diseño, selecciona un
TextView
. Luego, en Atributos, selecciona fontFamily > Más fuentes. Aparecerá la ventana Resources. - En el menú Fuente, selecciona Google Fonts.
- En el cuadro Fuentes, selecciona una fuente debajo de "Descargable". en una sola área de almacenamiento en etapa intermedia.
- Selecciona Crear fuente descargable y haz clic en Aceptar.
Android Studio genera automáticamente los archivos en formato XML relevantes que se necesitan para renderizar la fuente. correctamente en tu app.
Cómo usar la función Fuentes para descargar de manera programática
A partir de Android 8.0 (nivel de API 26), AndroidX Core brinda compatibilidad total con la función Fuentes para descargar. Para para obtener más información sobre el uso de la biblioteca de AndroidX Core, consulta la Sección de la biblioteca de fuentes para descargar de AndroidX Core en esta página.
Para usar la función Fuentes para descargar de forma programática, interactúa con dos clases clave:
android.graphics.fonts.FontRequest
: esta clase te permite crear una solicitud de fuente.FontsContractCompat
: esta clase te permite crear un nuevoTypeface
objeto basado en la solicitud de fuente.
Tu app recupera fuentes del proveedor mediante la API de FontsContract
. Cada
proveedor tiene su propio conjunto de restricciones en las versiones de Android y el idioma de consulta que admite. Para
más información sobre las versiones de Android y el formato de consulta, consulta la
en la documentación de Google Cloud.
Para descargar una fuente, completa los siguientes pasos:
- Crea una instancia de la clase
android.graphics.fonts.FontRequest
para solicitar la del proveedor. Para crear una solicitud, pasa los siguientes parámetros:- Es la autoridad del proveedor de fuentes.
- El paquete del proveedor de fuentes para verificar su identidad
- La búsqueda de string de la fuente Para obtener más información sobre los formatos de consulta, revisa tu documentación del proveedor, como Google Fonts.
- Una lista de conjuntos de hashes para los certificados para verificar la identidad del proveedor.
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);
- Crea una instancia de la
FontsContract.FontRequestCallback
. - Anula el método
onTypefaceRetrieved()
para indicar que la solicitud de fuente está completa. Proporciona la fuente recuperada como parámetro. Puedes usar este método para configurar la fuente según sea necesario. Por ejemplo, puedes establecer la fuente en unTextView
- Anula el método
onTypefaceRequestFailed()
para recibir información sobre errores en el proceso de solicitud de fuentes. Más información sobre los códigos de error, consulta el constantes de código de error. - Llama al método
FontsContract.requestFont()
para recuperar la fuente a partir de ella. proveedor. El método inicia una verificación para determinar si la fuente existe en la caché. Si la fuente no está disponible localmente, llama al proveedor de fuentes y la recupera de forma asíncrona, y pasa el resultado a la devolución de llamada. 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 fuente
- Un controlador para recuperar fuentes en un subproceso
- Una instancia de la
Clase
En el siguiente código de muestra, se ilustra el proceso general de la función Fuentes para descargar:
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, consulta la DownloadableFonts app de ejemplo.
Cómo usar fuentes descargables con AndroidX Core
AndroidX Core brinda compatibilidad con la función Fuentes para descargar en dispositivos que ejecutan Android
API 14 o versiones posteriores El
androidx.core.provider
El paquete contiene las clases FontsContractCompat
y FontRequest
para implementar
la retrocompatibilidad de la función Fuentes para descargar. Las clases de AndroidX contienen métodos
similar a los métodos del framework, y el proceso de descarga de fuentes es similar al que
que se describe en la sección de esta página
usar la función Fuentes para descargar de manera programática.
Para descargar fuentes con AndroidX, importa FontsContractCompat
y
Clases FontRequest
del paquete androidx.core.provider
. Crea
instancias de estas clases en lugar de
FontsContract
y
Clases de framework de android.graphics.fonts.FontRequest
.
Cómo agregar una dependencia de AndroidX Core
Para usar las clases FontsContractCompat
y FontRequest
, debes modificar
las dependencias de ruta de clase del proyecto de tu app dentro del entorno de desarrollo.
Para agregar AndroidX Core al proyecto de tu aplicación, agrega la siguiente dependencia al archivo
Archivo build.gradle
:
Groovy
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
Cómo usar la función Fuentes para descargar como recursos en XML
Android 8.0 (nivel de API 26) y AndroidX Core ofrecen una forma más rápida y conveniente de declarar un la fuente personalizada como un recurso en el diseño XML. Esto significa que no es necesario empaquetar la fuente como un recurso. Puedes definir una fuente personalizada para todo tu tema, lo que acelera la usabilidad de varios grosores y estilos, como negrita, medio o claro, cuando se proporcionan.
- Crea un nuevo archivo en formato XML en la carpeta
res/font
. - Agrega un elemento raíz
<font-family>
y configura los atributos relacionados con la fuente, como se muestra en el siguiente archivo en formato XML de ejemplo: - Haz referencia al archivo como
@font/font_file_name
en el archivo en formato XML de diseño. También puedes usa elgetFont()
para recuperar el archivo de forma programática, por ejemplo,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>
Declara previamente las fuentes en el manifiesto
El aumento del diseño y la recuperación de recursos son tareas sincrónicas. De forma predeterminada, el primer intento de recuperar fuentes activa una solicitud al proveedor de fuentes y, por lo tanto, aumenta el primer diseño tiempo. Para evitar un retraso, puedes declarar previamente las fuentes que se deban recuperar en tu manifiesto. Cuando el sistema recupera la fuente del proveedor, está disponible de inmediato. Si la fuente la recuperación lleva más tiempo del esperado, el sistema anula el proceso de recuperación y usa fuente.
Para declarar previamente las fuentes en el manifiesto, completa los siguientes pasos:
- Crea un array de recursos en
res/values/arrays.xml
y declara las fuentes que usas que deseas cargar previamente. - Usa una etiqueta
meta-data
para declarar el array de recursos en tu manifiesto.
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" />
Agregar certificados
Cuando un proveedor de fuentes no esté preinstalado o si usas la biblioteca de AndroidX Core, declara los certificados con los que está firmado el proveedor de fuentes. El sistema usa los certificados para verificar la la identidad del proveedor de fuentes.
Sigue estos pasos para agregar certificados:
- Crea un array de strings con los detalles del certificado. Más información sobre los certificados consulta la documentación de tu proveedor de fuentes.
- Configura el atributo
fontProviderCerts
para el array.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"
Fuentes descargables en Compose
Comienza en Compose 1.2-alpha07 puedes usar la API de Downloadable Fonts en tu app de Compose para descargar Google Fonts de forma asíncrona y úsalos en tu app. Para más información, consulta la Fuentes para descargar de Compose.