Uso de fuente en XML en API

6 minutos de lectura

avatar de usuario de sziraqui
sziraqui

https://developer.android.com/preview/features/working-with-fonts.html

Android API 26 es compatible con esto, pero ¿tenemos una biblioteca de soporte que pueda proporcionar el uso de fuentes como recurso en resolución? [ font in XML ] En caso afirmativo, ¿hasta qué API es compatible?

Estoy hablando de la función Android O SDK que nos permite configurar la fuente en XML como se indica en el enlace anterior. Esta no es una característica nativa en MM, estoy seguro.

  • Estoy usando esta función en una de mis aplicaciones, que admite API 9 a API 18. No hay limitación, que yo sepa. Dejé de admitir API 8, pero supongo que también habría funcionado.

    – Phantommaxx

    12 de junio de 2017 a las 18:13


  • ¿Qué biblioteca ha agregado a gradle?

    – sziraqui

    12 de junio de 2017 a las 18:15

  • NINGUNO. Es una característica nativa. Por cierto, Eclipse no necesita toda esa “cosa de Gradle”;)

    – Phantommaxx

    12 de junio de 2017 a las 18:15


  • Creo que me están malinterpretando. Estoy hablando de la función “fuente en XML” que se introdujo en O. Pregunta editada para aclarar

    – sziraqui

    12/06/2017 a las 18:20


  • with some little trick != una característica nativa

    – sziraqui

    22 de julio de 2017 a las 20:21

Avatar de usuario de Yuri Misyac
Yuri Misyac

Para admitir la familia de fuentes en API inferior a 26, necesitamos usar

<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>

en lugar de

<font android:fontStyle="normal" android:fontWeight="400" android:font="@font/myfont-Regular"/>

Según Google es compatible con Android 4.0+ (API 14+) siempre que se cumplan estas condiciones:

  • estas usando el biblioteca de apoyo versión 26.0.0-beta1 o después
  • Tu estas usando AppCompat

Fuentes:

Fuentes en XML: uso de la biblioteca de soporte

Historial de revisión de la biblioteca de soporte

Esperaba poder usar esto en widgets de aplicaciones en versiones de Android anteriores a la 8 (API 26), sin embargo, no es posible, ya que AppCompatTextView no se puede usar en widgets de aplicaciones. Ninguna de las alternativas de terceros a las ‘Fuentes en XML’ de Android O, como el Caligrafía el trabajo de la biblioteca en los widgets de la aplicación tampoco.

La única alternativa para los widgets de aplicaciones es usar un Vista de imagen en lugar de un Vista de texto y usando VistasRemotas métodos tales como setImageViewUri(…) y setImageViewBitmap(…)los cuales son problemáticos.

  • Gracias. ¿Por qué otros decían que es una característica nativa? Estoy usando SDK Android Studio 2.3.2. Intenté usar @font/arial.ttf. No funcionó. Estaba usando la biblioteca de soporte versión 25.3.1. Ahora sé lo que estaba mal.

    – sziraqui

    21 de julio de 2017 a las 9:37

  • ¿Esto funcionó? algunas personas dicen que debe actualizar a Android Studio 3 para que esto funcione.

    – usuario1506104

    20 de diciembre de 2017 a las 12:50

  • Gracias por la anotación. Cambié mi a y ahora funciona.

    – tmm1

    9 de enero de 2018 a las 22:17


Avatar de usuario de Jemshit Iskenderov
Jemshit Iskenderov

Para completar la respuesta de Yuri, las fuentes son compatibles con API 16. Para crear una familia de fuentes (donde se especifican diferentes pesos de fuentes), debe crear my_font_family.xml por debajo /res/fuente/ como esta escrito en el documento:

<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="normal" app:fontWeight="600" app:font="@font/myfont_semi_bold" />
    <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont_italic" />
</font-family>

Para usar esto en TextView xml, debe usar app:fontFamily="@font/my_font_family"ten cuidado con app: en lugar de android:.

Para elegir específico fontWeightpuedes usar android:textFontWeight="200" pero solo funciona en API>=28. Para elegir una fuente diferente según el peso antes de API 28, tiene dos opciones. Puedes usar android:textStyle="bold" para especificar solo “normal/cursiva/negrita”, pero no el peso exacto. O puede usar directamente el peso específico de la fuente como esta: app:fontFamily="@font/myfont_semi_bold".

Tenga en cuenta: si está utilizando una vista de texto personalizada, YourTextViewen su aplicación, tiene que extenderse AppCompatTextView y no simplemente android.widget.TextView

  • Has probado textFontWeight? Porque incluso en API 28 no me funciona.

    – Florián Walther

    14 de abril de 2019 a las 18:02

  • No me funciona, lo estoy ejecutando en un emulador. Estoy usando la implementación ‘androidx.appcompat:appcompat:1.0.2’ y el tema MaterialComponents

    – Ganesh Chowdhary Sadanala

    9 de agosto de 2019 a las 14:07


  • @GaneshChowdharySadanala Verifique la nota agregada, eso podría ayudarlo.

    – JaydeepW

    29 de marzo de 2020 a las 6:30

  • La solución textStyle no funciona en Android 5 con biblioteca de soporte

    – AAverin

    12 de abril de 2021 a las 14:34

Algunos usuarios llegarán a esta página en busca de instrucciones para usar fuentes personalizadas en su aplicación desde xml. Así es como lo hice:

El directorio de recursos de fuentes no está presente de forma predeterminada. Puede crearlo manualmente siguiendo las documentación aquí [too much work]

O use el selector de fuente de GUI-

  • Seleccione un TextView en la pestaña Diseño.

  • Abrir menú desplegable de fontFamily atributo xml.

  • Desplácese hacia abajo hasta “Más fuentes”.

  • Elija una “Fuente descargable” de la ventana emergente que aparece.

Android Studio creará automáticamente un directorio de recursos de fuentes con las declaraciones necesarias mencionadas en la documentación anterior. Después de este paso, puede copiar su archivo de fuente personalizado (por ejemplo, myfont.ttf) en el directorio de fuentes y configurar la fuente deseada desde xml, por ejemplo:

<TextView
     android:fontFamily="@font/myfont"
     android:id="@+id/aboutus_head_textview"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="@string/who_are_we" />

Si desea utilizar la misma fuente en toda su aplicación, puede configurar fontFamily su AppTheme en styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- custom font for the entire app -->
        <item name="fontFamily">@font/myfont</item>
    </style>

[ prefix fontFamily with android: if above did not work ]

Capturas de pantalla:

Captura de pantalla 1

Captura de pantalla 2

Nota: esta respuesta asume que está utilizando Android Studio 3+ y la biblioteca de soporte versión 26+

Aquí hay un ejemplo, min sdk support 18 (en la aplicación)

https://github.com/mukundrd/androidFonts

  • ¿Es posible incluir APIs más antiguas?

    – rraallvv

    24 de junio de 2019 a las 15:44

Avatar de usuario de ValdaXD
ValdaXD

Esta podría ser una forma no deseada de hacerlo, pero si tiene una fuente global (tipo de letra) en xml, puede crear una vista de texto y obtener el tipo de letra desde allí.

TextView dummy = new TextView(context);
doSomethingWithTheTypeface(dummy.getTypeface());

  • ¿Es posible incluir APIs más antiguas?

    – rraallvv

    24 de junio de 2019 a las 15:44

¿Ha sido útil esta solución?