Jawaban:
Sudahkah Anda melihat android.graphics.Paint.measureText (String txt) ?
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();
Jawaban tambahan
Ada sedikit perbedaan antara lebar yang dikembalikan oleh Paint.measureTextdan Paint.getTextBounds. measureTextmengembalikan lebar yang mencakup nilai advanceX glyph yang melapisi bagian awal dan akhir string. The Rectlebar dikembalikan oleh getTextBoundstidak memiliki bantalan ini karena batas adalah Rectbahwa erat membungkus teks.
Sebenarnya ada tiga cara berbeda untuk mengukur teks.
GetTextBounds:
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()
MeasureTextWidth:
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)
Dan 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()
Perhatikan bahwa getTextWidths bisa berguna jika Anda mencoba menentukan kapan harus membungkus teks ke baris berikutnya.
MeasTextWidth dan getTextWidth sama dan memiliki lebar lanjutan yang mengukur yang diposkan orang lain. Beberapa menganggap ruang ini berlebihan. Namun, ini sangat subjektif dan tergantung pada font.
Misalnya lebar dari batas teks ukuran sebenarnya terlihat terlalu kecil:

Namun ketika menambahkan teks tambahan, batas untuk satu huruf terlihat normal:

Gambar diambil dari Android Developers Guide to Custom Canvas Drawing
Yah saya telah melakukan dengan cara yang berbeda:
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());
Semoga ini bisa membantu Anda.
Saya menggunakan metode mengukurText () dan getTextPath () + computeBounds () dan membangun Excel dengan semua atribut teks untuk font ukuran tetap yang dapat ditemukan di bawah https://github.com/ArminJo/android-blue-display/blob /master/TextWidth.xlsx . Di sana Anda akan menemukan juga rumus sederhana untuk atribut teks lainnya seperti naik dll.
The app serta fungsi drawFontTest () untuk menghasilkan nilai-nilai baku yang digunakan dalam excel juga tersedia di repo ini.
Anda dapat menggunakan "textPaint.getTextSize ()" untuk mendapatkan lebar teks