Yanıtlar:
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();
Tamamlayıcı cevap
Döndürdüğü genişlik arasında küçük bir fark var Paint.measureText
VePaint.getTextBounds
. measureText
dizenin başlangıcını ve sonunu dolduran glifin advanceX değerini içeren bir genişlik döndürür. Rect
Tarafından döndürülen genişlik getTextBounds
sınırları olduğu için bu dolgu yok Rect
sıkıca metni sarar.
Aslında metni ölçmenin üç farklı yolu var.
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)
Ve 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()
Metni bir sonraki satıra ne zaman kaydıracağınızı belirlemeye çalışıyorsanız getTextWidths öğesinin yararlı olabileceğini unutmayın.
MeasureTextWidth ve getTextWidth eşittir ve başkalarının hakkında gönderi paylaştığı gelişmiş genişliğe sahiptir. Bazıları bu alanı aşırı buluyor. Ancak, bu çok özneldir ve yazı tipine bağlıdır.
Örneğin, ölçü metin sınırlarından gelen genişlik aslında çok küçük görünebilir:
Ancak ek bir metin eklerken bir harfin sınırları normal görünür:
Alınan Görüntüler Özel Tuval Çizimi için Android Geliştirici Kılavuzu
Ben farklı bir şekilde yaptım:
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());
Umarım bu sana yardımcı olur.
MeasureText () ve getTextPath () + computeBounds () yöntemlerini kullandım ve https://github.com/ArminJo/android-blue-display/blob altında bulunabilen sabit boyutlu yazı tipi için tüm metin özniteliklerine sahip bir Excel oluşturdum /master/TextWidth.xlsx . Orada, yükselme vb. Gibi diğer metin özellikleri için basit formüller de bulacaksınız.
Uygulama aynı zamanda fonksiyon drawFontTest () Excel kullanılan ham değerlerinin üretilmesi için Repo de mevcuttur.
metin genişliğini elde etmek için "textPaint.getTextSize ()" kullanabilirsiniz