2010-09-02 18 views

Répondre

169

Vous pouvez utiliser la méthode getTextBounds(String text, int start, int end, Rect bounds) d'un objet Paint. Vous pouvez soit utiliser l'objet de peinture fourni par un TextView ou en construire un vous-même avec l'apparence de votre texte désiré.

L'utilisation d'un Textview vous pouvez effectuer les opérations suivantes:

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: que se passe-t-il si la chaîne est une chaîne étendue? – Ashwin

+0

Bonne réponse. A propos, le résultat sera plus précis si vous appelez 'textView.setTextSize()'. – li2

14

Il y a deux mesures de largeur différentes pour un texte. L'un est le nombre de pixels qui a été dessiné dans la largeur, l'autre est le nombre de «pixels» le curseur doit être avancé après avoir dessiné le texte.

paint.measureText et paint.getTextWidths renvoie le nombre de pixels (en float) que le curseur doit être avancée après étirage de la chaîne donnée. Pour le nombre de pixels peints, utilisez paint.getTextBounds comme mentionné dans l'autre réponse. Je crois que cela s'appelle «l'avance» de la police. Pour certaines polices, ces deux mesures diffèrent (beaucoup), par exemple la police Black Chancery a des lettres qui dépassent les autres lettres (chevauchement) - voir la majuscule 'L'. Utilisez paint.getTextBounds comme mentionné dans l'autre réponse pour obtenir des pixels peints.

4

J'ai mesuré la largeur de cette façon:

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()); 

Cela vous aidera.