Comment obtenir une largeur de chaîne sur Android?

Je voudrais aussi avoir de la hauteur si possible.

Vous pouvez utiliser la getTextBounds(Ssortingng text, int start, int end, Rect bounds) d’un object Paint. Vous pouvez utiliser l’object de peinture fourni par un TextView ou en créer un vous-même avec l’apparence de texte souhaitée.

En utilisant une 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(); 

Si vous avez juste besoin de la largeur, vous pouvez utiliser:

 float width = paint.measureText(ssortingng); 

http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.Ssortingng)

Il existe deux mesures de largeur différentes pour un texte. Le premier est le nombre de pixels qui ont été dessinés dans la largeur, l’autre est le nombre de «pixels» dont le curseur doit être avancé après avoir dessiné le texte.

paint.measureText et paint.getTextWidths retournent le nombre de pixels (en float) dont le curseur doit être avancé après avoir dessiné la chaîne donnée. Pour le nombre de pixels peints, utilisez paint.getTextBounds comme indiqué dans les autres réponses. Je crois que cela s’appelle le “Advance” de la police.

Pour certaines fonts, ces deux mesures diffèrent (beaucoup), par exemple la police Black Chancery a des lettres qui dépassent les autres lettres (se chevauchant) – voir la majuscule ‘L’. Utilisez paint.getTextBounds comme indiqué dans les autres réponses pour obtenir des pixels peints.

J’ai mesuré la largeur de cette manière:

 Ssortingng 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 aiderait.

Vous voulez probablement connaître les dimensions peintes pour une chaîne de texte donnée avec une police donnée (par exemple une police particulière telle que la famille de fonts «sans-serif» avec un style BOLD_ITALIC et une taille particulière en sp ou en px).

Plutôt que de gonfler un TextView , vous pouvez passer à un niveau inférieur et travailler directement avec un object Paint pour du texte sur une seule ligne , par exemple:

 // Maybe you want to construct a (possibly static) member for repeated computations Paint paint = new Paint(); // You can load a font family from an asset, and then pick a specific style: //Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); //Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD); // Or just reference a system font: paint.setTypeface(Typeface.create("sans-serif",Typeface.BOLD)); // Don't forget to specify your target font size. You can load from a resource: //float scaledSizeInPixels = context.getResources().getDimensionPixelSize(R.dimen.mediumFontSize); // Or just compute it fully in code: int spSize = 18; float scaledSizeInPixels = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, spSize, context.getResources().getDisplayMesortingcs()); paint.setTextSize(scaledSizeInPixels); // Now compute! Rect bounds = new Rect(); Ssortingng mySsortingng = "Some ssortingng to measure"; paint.getTextBounds(mySsortingng, 0, mySsortingng.length(), bounds); Log.d(TAG, "width: " + bounds.width() + " height: " + bounds.height()); 

Pour le texte multi-lignes ou fractionné ( SpannedSsortingng ), envisagez d’utiliser un StaticLayout , dans lequel vous indiquez la largeur et dérivez la hauteur. Pour une réponse très élaborée sur la mesure et le dessin du texte sur un canevas dans une vue personnalisée, consultez: https://stackoverflow.com/a/41779935/954643

À noter également la réponse de @arberg ci-dessous concernant les pixels peints par rapport à la largeur d’avance (“nombre de pixels (en flottant) que le curseur doit faire avancer après avoir dessiné la chaîne donnée”).