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

  • Java.lang.ClassCastException: libcore.net.http.HttpURLConnectionImpl ne peut pas être transmis à javax.net.ssl.HttpsURLConnection
  • Comment définir le nombre de notification non lu dans NavigationView de DrawerLayout?
  • Remplacez un fragment par un autre fragment
  • Barre d'action pour Android 2.1
  • Fragment d'une activité? (Android)
  • Comment puis-je cacher le contrôle de zoom dans une vue web Android?
  • 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.

    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.