Pour éviter les problèmes liés aux différentes résolutions d'écran et aux différentes densités, je dimensionne et positionne tout sur la base du pourcentage de largeur et de hauteur de l'écran. Si le texte est redimensionné sur la base du pourcentage de largeur ou de hauteur de l'écran, la police aura la taille correcte sur tous les appareils et toutes les résolutions. Pour obtenir la taille correcte de la police en fonction de la largeur et de la hauteur de son espace, il suffit d'utiliser cette fonction :
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());
// Re-measure with font size near our desired result
paint.setTextSize(textSize);
// Check height constraints
FontMetricsInt metrics = paint.getFontMetricsInt();
float textHeight = metrics.descent - metrics.ascent;
if (textHeight > height)
{
textSize = (int) (textSize * (height / textHeight));
paint.setTextSize(textSize);
}
return textSize;
}
Voici le code pour obtenir la largeur et la hauteur de l'écran :
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();
}
Pour obtenir la taille de police souhaitée, il suffit de créer une zone basée sur la largeur et la hauteur de l'écran et de l'ajuster jusqu'à ce que la taille de la police soit correcte. Une fois que vous l'avez obtenue, elle devrait être correcte sur tous les appareils.
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));
J'espère que cela vous aidera