studio reales proyectos programacion introducción incluye herramientas fundamentos fuente código con avanzado aplicaciones android text size resolution drawtext

reales - manual android studio avanzado



Android: Tamaño de texto Canvas.drawText() en diferentes resoluciones de pantalla (4)

Para mi juego de Android tengo algunas llamadas a Canvas.drawText() .

Para las pruebas, utilizo el tamaño de fuente estándar que parece funcionar bien.

Sin embargo, cuando aumento la resolución a una densidad más alta, las imágenes más grandes se cargan automáticamente pero el texto ahora es increíblemente pequeño.

¿Existe una manera fácil de calcular en qué tamaño debe dibujarse el texto o estoy obligado a hacerlo manualmente?

editar: ¿Cuál fue el punto de editar mi publicación @Suragch?


Al llamar a Canvas.drawText() el tamaño de texto se determina primero por el objeto de Paint pasado, que se puede establecer a través de Paint.setTextSize() . Canvas escala automáticamente el tamaño del texto en función de la densidad del lienzo, que se puede encontrar utilizando Canvas.getDensity() .

Al configurar el tamaño de texto en un objeto de pintura que se dibujará en Canvas, trabaje con un valor unitario de dp o sp y deje que Canvas maneje la escala por usted.


La forma más fácil es definir el tamaño de la fuente en el directorio de recursos con las unidades de scale-independent pixel (sp) de la scale-independent pixel (sp) o el density-independent pixel (dp) la density-independent pixel (dp) . A continuación, obtenga el tamaño de texto usando

int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size); mTextView.setTextSize(scaledSize);

Esto escalará el tamaño del texto de acuerdo con la densidad / resolución de la pantalla actual y la configuración del tamaño de fuente del usuario.

¿Cómo definir el tamaño de fuente en el directorio de recursos?

Crea un archivo llamado dimens.xml en la carpeta res->values . Luego copie el siguiente código.

<resources> <dimen name="font_size">25sp</dimen> // sp or dp accordingly </resources>

El atributo de name de la etiqueta <dimen> se usará como ID de recurso.


La forma más fácil es definir los tamaños de fuente en sus recursos con las unidades de píxeles independientes de escala ( sp ): esta unidad es como píxeles independientes de densidad ( dp o dip ) ya que tiene en cuenta la densidad de la pantalla pero también en cuenta la configuración de tamaño de fuente del usuario.

Para agregar una nueva dimensión, cree un archivo dimens.xml en su carpeta res/values e ingrese el siguiente código para agregar una nueva dimensión con el nombre myFontSize :

<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="myFontSize">20sp</dimen> </resources>

A continuación, puede obtener el tamaño del texto en su aplicación usando

int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize);

El tamaño resultante se escalará correctamente para tener en cuenta la densidad de la pantalla actual y la configuración del tamaño de la fuente.

Para obtener más información, consulte la página de Desarrolladores de Android en Más recursos .


Puedes hacerlo tú mismo usando una simple operación matemática:

Debe calcular una relación que dibuje su texto del mismo tamaño para cualquier tamaño de lienzo, así que use el tamaño real del lienzo, como este:

double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());

Pero ese número es demasiado grande, así que divídalo por uno que se adapte a sus necesidades, digamos 250:

relation = relation / 250;

Ahora puede configurar el tamaño de su texto de esta manera:

paint.setTextSize((float) (myFontSize * relation));

No tiene que dividir necesariamente la relación por ningún número, pero en ese caso tendrá que usar tamaños de letra muy pequeños para la variable myFontSize . Para mí, 250 funciona bien para usar tamaños de fuente regulares que se ajustarán a cualquier tamaño de pantalla, dado que ya está tomando en cuenta la dimensión de píxeles de su lienzo.