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.measureText
dan Paint.getTextBounds
. measureText
mengembalikan lebar yang mencakup nilai advanceX glyph yang melapisi bagian awal dan akhir string. The Rect
lebar dikembalikan oleh getTextBounds
tidak memiliki bantalan ini karena batas adalah Rect
bahwa 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