Comment obtenir rapidement la largeur et la hauteur de TextView en utilisant Paint.getTextBounds ()?

Il existe une méthode dans Paint class: Paint.getTextBounds () qui renvoie Rect occupé par un texte. Mais selon cette réponse, il renvoie quelque chose de différent alors largeur / hauteur de TextView.

Q1: Existe-t-il un moyen d'obtenir la largeur et la hauteur de TextView à l'aide de Rect renvoyé par Paint.getTextBounds () ?

Notez, je dois connaître précisément la largeur / hauteur. Je serais heureux de connaître la limite supérieure du rect avec une erreur possible d'environ 2-3%, mais il DOIT ne pas être plus grand (et devrait fonctionner pour n'importe quel téléphone ne dépend pas de la résolution de l'écran et de la densité des pixels) puis des limites TextView

Q2: Y a-t-il une autre méthode QUICK de déterminer la largeur et la hauteur de certains textes avec une taille de texte spécifiée?

Je sais, la largeur peut être déterminée par Paint.measureText () , mais cela ne renvoie pas la hauteur. La hauteur peut être déterminée en créant de nouveaux StaticLayout avec du texte, puis en appelant StaticLayout.getHeight () , mais cela est trop lent. J'ai besoin de plus rapidement.


L'arrière-plan de tout cela fait que AutoFitTextView automatiquement le texte à l'intérieur de ses limites par une taille de texte descendante ou descendante, et il devrait le faire rapidement, car il y aura beaucoup de tels AutoFitTextView s changés dynamiquement très rapidement.

  • Android.content.res.Resources $ NotFoundException: String ID de la ressource # 0x0
  • Implémentez une vue de récupérateur Android extensible avec des en-têtes autocollants, une fonction de recherche, un sélecteur latéral alphabétique et des éléments / cartes Swipable?
  • Colonnes dans ListView Android
  • Android ListView setSelection () ne semble pas fonctionner
  • L'élément de liste affiche-t-il la glisse vers la gauche et glisse-t-elle droit?
  • Numéro de l'élément de prévisualisation ListView de contrôle dans Android Studio
  • Android: comment supprimer une ligne d'un ListView avec un bouton de suppression dans la ligne
  • Parcourir l'arrière-plan de l'élément via un sélecteur personnalisé
  • 2 Solutions collect form web for “Comment obtenir rapidement la largeur et la hauteur de TextView en utilisant Paint.getTextBounds ()?”

    Trouvé une méthode simple et non lente de détermination de la largeur / hauteur du texte dessinée avec Paint spécifique qui n'utilise pas StaticLayout .

     public int getTextWidth(String text, Paint paint) { Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), bounds); int width = bounds.left + bounds.width(); return width; } public int getTextHeight(String text, Paint paint) { Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), bounds); int height = bounds.bottom + bounds.height(); return height; } 

    La courte description simple de trick: Paint.getTextBounds(String text, int start, int end, Rect bounds) renvoie Rect qui ne démarre pas (0,0) . C'est-à-dire, pour obtenir la largeur réelle du texte qui sera définie en appelant Canvas.drawText(String text, float x, float y, Paint paint) avec le même objet Paint de getTextBounds() vous devez ajouter la position gauche de Rect .

    Notez ces bounds.left – c'est la clé du problème.

    De cette façon, vous recevrez la même largeur de texte que celle que vous recevrez à l'aide de Canvas.drawText() .


    Une explication beaucoup plus détaillée est donnée dans cette réponse.

    Avec java, j'ai utilisé la classe FontMetrics.

     Font f= new Font("Arial", Font.BOLD, 16); FontMetrics metric = getFontMetrics(f); metric.stringWidth("the text I want to measure"); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.