2010-12-01 33 views
6

Eh bien, j'ai réussi à répondre à toutes mes questions dans le titre. J'ai besoin de casser un long texte dans les colonnes/cadres et de les mettre en page pour voir. Je cherche des solutions depuis quelques jours maintenant, mais je ne trouve pas d'exemples ou de documentation claire sur la façon de réaliser une de mes tâches. J'ai vu quelques mentions de StaticLayout, mais je ne sais pas comment l'utiliser correctement. En ce qui concerne la hauteur du texte, j'ai essayé la méthode getTextBounds de TextPaint, mais elle n'a pas de limite de largeur et on dirait qu'elle ne mesure qu'une seule ligne (enfin, peut-être que je faisais quelque chose de mal).Comment obtenir la hauteur du texte avec une largeur fixe et obtenir la longueur du texte qui tient dans un cadre?

Peut-être que quelqu'un a un exemple de StaticLayout ou son utilisation de sous-classe? Tout a l'air si simple "sur le papier": créez le "cadre", vérifiez combien de caractères s'y logent, remplissez le cadre et positionnez-le, répétez jusqu'à la fin du texte et pourtant je ne trouve rien sur la façon de le faire :)

+0

Avez-u tester le code? –

Répondre

6

Je ne connais pas la réponse exacte à votre question, mais vous pouvez généralement calculer la largeur et la hauteur d'un texte en fonction du type et de la taille de la police en utilisant les méthodes disponibles dans la bibliothèque graphique.

Je l'ai fait en C# et en Java. en C# il s'appelle "MeasureString", et en Java, "FontMetrics".

EDIT:

Voir si ce code est utile (je ne l'ai pas compilé parce que je n'ai pas Android SDK ici):

String myText="";  
    String tempStr=""; 

    int startIndex=0; 
    int endIndex=0; 

    //calculate end index that fits 
    endIndex=myPaint.breakText(myTest, true, frameWidth, null)-1; 

    //substring that fits into the frame 
    tempStr=myText.substring(startIndex,endIndex); 

    while(endIndex < myText.length()-1) 
    {   

     //draw or add tempStr to the Frame 
     //at this point 

     //set new start index 
     startIndex=endIndex+1; 

     //substring the remaining of text 
     tempStr=myText.substring(startIndex,myText.length()-1); 

     //calculate end of index that fits 
     endIndex=myPaint.breakText(tempStr, true, frameWidth, null)-1; 

     //substring that fits into the frame 
     tempStr=myText.substring(startIndex,endIndex); 
    } 

méthodes similaires sont disponibles pour Android:

breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 

Mesurer le texte en s'arrêtant tôt si la largeur mesurée dépasse la largeur maximale.

measureText(String text) 

Retour à la largeur du texte.

http://developer.android.com/reference/android/graphics/Paint.html

+0

pas travaillé dans android, @sniurkst, Si vous avez une réponse parfaite alors s'il vous plaît le poster. – Jayesh