Câu trả lời:
Bạn đã xem android.graphics.Paint.measureText (Chuỗi txt) chưa?
Paint paint = new Paint();
Rect bounds = new Rect();
int text_height = 0;
int text_width = 0;
paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size
String text = "Some random text";
paint.getTextBounds(text, 0, text.length(), bounds);
text_height = bounds.height();
text_width = bounds.width();
Bổ sung câu trả lời
Có một sự khác biệt nhỏ giữa chiều rộng được trả về bởi Paint.measureText
và Paint.getTextBounds
. measureText
trả về chiều rộng bao gồm giá trị AdvanceX của glyph đệm ở đầu và cuối chuỗi. Các Rect
chiều rộng được trả về bởi getTextBounds
không có đệm này vì các giới hạn là Rect
rằng chặt chẽ kết thúc tốt đẹp các văn bản.
Thực tế có ba cách đo văn bản khác nhau.
GetTextBound:
val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val rect = Rect()
paint.getTextBounds(contents, 0, 1, rect)
val width = rect.width()
Đo lườngWidth:
val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val width = paint.measureText(contents, 0, 1)
Và getTextWidths:
val paint = Paint()
paint.typeface = ResourcesCompat.getFont(context, R.font.kaushanscript)
paint.textSize = 500f
paint.color = Color.argb(255, 3, 221, 252)
val contents = "g"
val rect = Rect()
val arry = FloatArray(contents.length)
paint.getTextBounds(contents, 0, contents.length, rect)
paint.getTextWidths(contents, 0, contents.length, arry)
val width = ary.sum()
Lưu ý rằng getTextWidths có thể hữu ích nếu bạn đang cố xác định thời điểm bọc văn bản cho dòng tiếp theo.
Các biện pháp đo lườngWWth và getTextWidth bằng nhau và có chiều rộng nâng cao mà thước đo mà người khác đã đăng. Một số xem xét không gian này quá mức. Tuy nhiên, điều này rất chủ quan và phụ thuộc vào phông chữ.
Ví dụ: chiều rộng từ giới hạn văn bản đo có thể thực sự trông quá nhỏ:
Tuy nhiên, khi thêm một văn bản bổ sung, giới hạn cho một chữ cái trông bình thường:
Hình ảnh được lấy từ Hướng dẫn dành cho nhà phát triển Android để vẽ Canvas tùy chỉnh
Vâng, tôi đã làm theo cách khác nhau:
String finalVal ="Hiren Patel";
Paint paint = new Paint();
paint.setTextSize(40);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
paint.getTextBounds(finalVal, 0, finalVal.length(), result);
Log.i("Text dimensions", "Width: "+result.width()+"-Height: "+result.height());
Hy vọng điều này sẽ giúp bạn.
Tôi đã sử dụng các phương thức đo lường () và getTextPath () + computeBound () và xây dựng một Excel với tất cả các thuộc tính văn bản cho phông chữ có kích thước cố định có thể tìm thấy trong https://github.com/ArminJo/android-blue-display/blob /master/TextWidth.xlsx . Ở đó bạn cũng sẽ tìm thấy các công thức đơn giản cho các thuộc tính văn bản khác như tăng dần, v.v.
Các ứng dụng cũng như các chức năng drawFontTest () để tạo ra các giá trị thô được sử dụng trong excel cũng có sẵn trong repo này.
bạn có thể sử dụng "textPaint.getTextSize ()" để có chiều rộng văn bản