2010-09-02 14 views

cevap

169

Bir Paint nesnesinin getTextBounds(String text, int start, int end, Rect bounds) yöntemini kullanabilirsiniz. TextView tarafından sağlanan boya nesnesini kullanabilir veya istediğiniz metin görünümünü kendiniz oluşturabilirsiniz.

yapabilir misin bir TextView'un kullanarak aşağıdaki: Sadece genişliği gerekiyorsa

Rect bounds = new Rect(); 
Paint textPaint = textView.getPaint(); 
textPaint.getTextBounds(text, 0, text.length(), bounds); 
int height = bounds.height(); 
int width = bounds.width(); 
+2

@Frank: String bir yayılmış dizgeyse? – Ashwin

+0

Harika cevap. Bu arada, textView.setTextSize() 'işlevini çağırırsanız sonuç daha doğru olur. – li2

14

bir için iki farklı genişlik ölçüleri vardır Metin. Biri genişlikte çizilen piksellerin sayısı, diğeri ise metnin çizilmesinden sonra imlecin ilerlemesi gereken 'piksel' sayısıdır.

paint.measureText ve imleç verilen dize çizildikten sonra ileri edilmelidir (float) piksel sayısını döndürürpaint.getTextWidths. Boyanan piksel sayısı için diğer cevapta belirtildiği gibi paint.getTextBounds kullanın. Buna fontun 'Advance' denir inanıyorum.

Bazı fontlar için bu iki ölçüm farklıdır (örneğin), örneğin Black Chancery fontu diğer harfleri (üst üste binen) aşan harfler içerir - bkz. "L" harfi. Piksellerin boyanması için diğer yanıtta belirtildiği gibi paint.getTextBounds kullanın.

4

ben bu şekilde genişliğini ölçmüştür:

String str ="Hiren Patel"; 

Paint paint = new Paint(); 
paint.setTextSize(20); 
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(str, 0, str.length(), result); 

Log.i("Text dimensions", "Width: "+result.width()); 

Bu size yardımcı olacaktır.

İlgili konular