J'aimerais aussi prendre de la hauteur si possible.
android
string
bounding-box
Mikael Lindlöf
la source
la source
textView.setTextSize()
.Si vous avez juste besoin de la largeur, vous pouvez utiliser:
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
la source
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
.textSize
est en pixels.Il existe deux mesures de largeur différentes pour un texte. L'un est le nombre de pixels qui ont été dessinés dans la largeur, l'autre est le nombre de «pixels» que le curseur doit avancer après avoir dessiné le texte.
paint.measureText et paint.getTextWidths renvoie le nombre de pixels (en float) que le curseur doit avancer après avoir dessiné la chaîne donnée. Pour le nombre de pixels peints, utilisez paint.getTextBounds comme mentionné dans une autre réponse. Je crois que cela s'appelle «Advance» 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 (se chevauchant) - voir le «L» majuscule. Utilisez paint.getTextBounds comme mentionné dans une autre réponse pour obtenir des pixels peints.
la source
J'ai mesuré la largeur de cette façon:
Cela vous aiderait.
la source
Très probablement, vous voulez connaître les dimensions peintes pour une chaîne de texte donnée avec une police donnée (c'est-à-dire une police particulière
Typeface
telle que la famille de polices «sans-serif» avec un style BOLD_ITALIC, et une taille particulière en sp ou px).Plutôt que de gonfler un plein souffle
TextView
, vous pouvez aller au niveau inférieur et travailler avec unPaint
objet directement pour du texte sur une seule ligne , par exemple:Pour le texte multi-lignes ou fractionné (
SpannedString
), envisagez d'utiliser aStaticLayout
, 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 de texte sur un canevas dans une vue personnalisée, voir: https://stackoverflow.com/a/41779935/954643Il convient également de noter la réponse de @ arberg ci-dessous à propos des pixels peints par rapport à la largeur d'avance ("nombre de pixels (en flottant) que le curseur doit avancer après avoir dessiné la chaîne donnée"), au cas où vous auriez besoin de gérer cela.
la source
J'aimerais partager un meilleur moyen (plus polyvalent que la réponse actuellement acceptée) d'obtenir la largeur exacte d'un texte dessiné (
String
) avec l'utilisation de la classe statiqueStaticLayout
:cette méthode est plus précise que
textView.getTextBounds()
, puisque vous pouvez calculer la largeur d'une seule ligne dans une multiligneTextView
, ou que vous ne pouvez pas l'utiliserTextView
pour commencer (par exemple dans uneView
implémentation personnalisée ).Cette méthode est similaire à
textPaint.measureText(text)
, mais elle semble être plus précise dans de rares cas.la source