Để tránh các vấn đề về độ phân giải màn hình khác nhau và mật độ khác nhau, tôi định kích thước và định vị mọi thứ dựa trên phần trăm chiều rộng và chiều cao của màn hình. Nếu văn bản được thay đổi kích thước dựa trên phần trăm chiều rộng hoặc chiều cao của màn hình, thì phông chữ sẽ có kích thước chính xác trên mọi thiết bị và mọi độ phân giải. Để có được kích thước phông chữ chính xác dựa trên chiều rộng và chiều cao của không gian, chỉ cần sử dụng chức năng này:
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;
}
Đây là mã để lấy chiều rộng và chiều cao của màn hình:
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();
}
Để có được kích thước phông chữ bạn muốn, chỉ cần tạo một khu vực dựa trên chiều rộng màn hình và chiều cao màn hình và điều chỉnh nó cho đến khi kích thước phông chữ phù hợp. Sau khi bạn làm cho nó trông đúng, nó sẽ trông đúng trên tất cả các thiết bị.
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15))
Tôi hy vọng cái này sẽ giúp bạn