Menú Cerrar

Establecer el tamaño de las fuentes de letras en el canvas de Android

Cuando empecé a programar en serio para Android me surgieron dudas y preguntas, cuestiones técnicas específicas y etc. La mayoría de estas dudas eran cosas de novato que cuando se consiguen solucionar se te queda una cara…

Este post va dirigido a los que empiezan con Android y viene a intentar resolver algunas de esas dudas que te bloquea y no te deja progresar. Después de pelearte con los dp, dpi, ldpi, mdpi, hdpi, xhdpi y mi favorito el xxhdpi ;), te das cuenta que elegir un tamaño para el texto (o tamaños varios) es muy fácil y no hace falta nada de lo dicho antes. Para darle tamaño a las letras hay que instanciar un objeto Paint() que podrá ser utilizado después al escribir en el canvas con canvas.drawText(). La clase Paint() tiene muchos métodos para personalizar el texto como se necesite, el que nos interesa es setTextSize(). Este método admite un parámetro del tipo float con el que se establece el tamaño del texto en píxeles.

Lo dicho hasta ahora no es nada complicado y lo que viene ahora es menos complicado. Es más un consejo o una idea de como elegir un tamaño. Hay un problema, elegir un tamaño arbitrario puede quedar bien con un móvil concreto, pero si se quiere hacer una aplicación sólida capaz de adaptarse a cualquier modelo Android y tamaño de pantalla, hay que planificarlo mejor. Hablamos de canvas, por lo que se supone que hablamos de juegos aunque no hay ninguna razón que impida hacer aplicaciones serias que «vivan» en el canvas.

No me enrollo más, como he dicho antes setTextSize() establece el tamaño en píxeles y es en píxeles en lo que hay que pensar. La idea es simple, ¿cuántas letras quieres que quepan en la pantalla? Naturalmente puede haber varios tamaños, no es lo mismo poner arriba a la derecha en un texto pequeño pero visible los puntos conseguidos que un «You win» grande y en medio de la pantalla. La respuesta es bien sencilla, divide el ancho del canvas entre el número de caracteres que quieras y siempre tendrás un texto igual en proporción, da igual que se ejecute la aplicación en un móvil antiguo, moderno o tableta Full HD. Dicho lo mismo de otra forma, por ejemplo, dividir el ancho del canvas (canvas.getWidth()) entre 20 y utilizar ese resultado en setTextSize() dará un resultado similar en móviles o tabletas con un ancho de 480, 540, 800, 1200, etc píxeles. Habrá que elegir el divisor según la orientación, si es estricta como portrait, landscape o si se permite girar.

Poco más puedo añadir, esta es mi forma de establecer el tamaño del texto, la utilicé en mi último juego Hit Red Button y también en el próximo que está en fase de desarrollo. Sólo es cuestión de escoger un tamaño relativo a algo y en mi caso lo hago relativo a la anchura de la pantalla.