Щоб уникнути проблем з різною роздільною здатністю екрана та різною щільністю, я розмірюю та розміщую все на основі процентної ширини та висоти екрану. Якщо розмір тексту змінюється на основі процентної ширини або висоти екрана, шрифт буде правильним розміром на всіх пристроях та у всіх роздільних здатностях. Щоб отримати правильний розмір шрифту на основі ширини та висоти його простору, просто використовуйте цю функцію:
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;
}
Ось код для отримання ширини та висоти екрана:
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();
}
Щоб отримати потрібний розмір шрифту, просто складіть область на основі ширини екрана та висоти екрана та налаштовуйте його, доки розмір шрифту не буде виглядати правильно. Після того, як ви зрозумієте, що він виглядає правильно, він повинен виглядати правильно на всіх пристроях.
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15))
Сподіваюся, це вам допоможе