Truco Android: Leer y usar las fuentes instaladas

A continuación encontrarás traducido al castellano el artículo escrito por Martin T. (MVP Xojo) y que está publicado originalmente en el Blog de Xojo.

En el momento de escribir este artículo el Framework de Android no soporta System.FontCount ni System.FontAt. No obstante, si quieres echar un vistazo a todas las fuentes disponibles en el sistema es posible hacerlo utilizando para ello unas pocas líneas de código Xojo.

Generalmente en Android se utilizan fuentes TTF (TrueType), de modo que el siguiente código sólo buscará dicho tipo de fuentes. Las fuentes a las que se puede acceder de forma global están ubicadas en la carpeta /system/fonts/ en Android. Utilizando el iterador FolderItem.Children podemos buscarlas y generar la representación visual de todas las fuentes para mostrarlas en una AndroidMobileTable.

Crea un nuevo proyecto Android. Añade una instancia de AndroidMobileTable (Table1) a Screen1 y bloquea el control sobre los cuatro costados de Screen1. Haz lo mismo con una Label (Label1) situada sobre Table1. A continuación, inserta el siguiente código en el evento Opening de Table1:

Const fontSuffix = ".ttf"

Var folder As FolderItem = New FolderItem("/system/fonts/")
Var counter As Integer

' Iterate over all files within the folder
For Each item As FolderItem In folder.Children

' Check for font file (ttf)
If Not item.Name.EndsWith(fontSuffix) Then Continue

counter = counter + 1
' Create a new Picture for visual representation of the font
Var pic As New Picture(Me.Width, 50)
Var g As Graphics = pic.Graphics

' Draw font name to the picture
g.Font = New Font(item, 20)
g.DrawText(item.Name.Left(item.Name.Length - 4), 5, pic.Height / 2 - g.TextHeight / 2 + g.Font.Ascent)

Me.AddRow("")

' Save Font as RowTag
Me.RowTagAt(Me.LastAddedRowIndex) = g.Font

' Add RowPicture to the row
Me.RowPictureAt(Me.LastAddedRowIndex, False, 0) = pic
Next

Self.Title = Self.Title + " (" + counter.ToString + ")

A continuación, añade el evento SelectionChanged a Table1 insertando el siguiente código:

' Change Label1 font to the selected one
Label1.TextFont = Me.RowTagAt(Me.SelectedRowIndex)

Ejecuta ahora el proyecto y tendrás un diálogo de selección de fuente completo en tu app Android.

Puede optimizarse el código utilizando la ruta al archivo de fuente como un RowTagAt en vez de un objeto Font, de modo que el objeto Font sólo se cree y asigne en el evento Table1.SelectionChanged.

El proyecto de ejemplo funciona a partir de Xojo 2023r4.

¡Feliz programación con Xojo!

Deja un comentario

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