Para evitar los problemas de diferentes resoluciones de pantalla y diferentes densidades, dimensiono y posiciono todo en función del porcentaje de ancho y alto de la pantalla. Si se cambia el tamaño del texto en función del porcentaje de ancho o alto de la pantalla, la fuente será del tamaño correcto en todos los dispositivos y todas las resoluciones. Para obtener el tamaño de fuente correcto según el ancho y la altura de su espacio, simplemente use esta función:
private float SetTextSize(String text, int width, int height)
{
Paint paint = new Paint();
float textWidth = paint.measureText(text);
float textSize = (int) ((width / textWidth) * paint.getTextSize());
paint.setTextSize(textSize);
textWidth = paint.measureText(text);
textSize = (int) ((width / textWidth) * paint.getTextSize());
paint.setTextSize(textSize);
FontMetricsInt metrics = paint.getFontMetricsInt();
float textHeight = metrics.descent - metrics.ascent;
if (textHeight > height)
{
textSize = (int) (textSize * (height / textHeight));
paint.setTextSize(textSize);
}
return textSize;
}
Aquí está el código para obtener el ancho y el alto de la pantalla:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
}
else
{
Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
}
Para obtener el tamaño de fuente que desea, simplemente cree un área basada en el ancho y la altura de la pantalla y ajústela hasta que el tamaño de fuente se vea bien. Una vez que lo vea bien, debería verse bien en todos los dispositivos.
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15))
Espero que esto te ayude