2010-12-01 4 views
6

Nun, ich habe es geschafft, alle meine Fragen in den Titel zu passen. Ich muss einen langen Text in Spalten/Frames zerlegen und sie in der Ansicht anordnen. Ich habe jetzt ein paar Tage lang nach Lösungen gesucht, aber ich kann keine Beispiele oder eine klare Dokumentation finden, wie ich meine Aufgaben erledigen könnte. Ich habe ein paar Erwähnungen von StaticLayout gesehen, aber ich weiß nicht, wie man es richtig benutzt. Was die Texthöhe betrifft, habe ich die getTextBounds-Methode von TextPaint ausprobiert, aber es hat keine Breitenbegrenzung und es sieht so aus, als ob es nur eine einzige Zeile misst (na ja, vielleicht habe ich etwas falsch gemacht).Wie bekomme ich Texthöhe mit fester Breite und bekomme Textlänge, die in einen Rahmen passt?

Vielleicht hat jemand ein Beispiel für StaticLayout oder es ist die Verwendung von Unterklassen?

Alles sieht so einfach "auf dem Papier" aus: "Frame" erstellen, prüfen, wie viele Zeichen darin passen, Rahmen ausfüllen und positionieren, bis zum Ende des Textes wiederholen und trotzdem nichts finden :)

+0

Haben u den Code testen? –

Antwort

6

Ich weiß nicht die genaue Antwort auf Ihre Frage, aber im Allgemeinen können Sie die Breite und Höhe eines Textes basierend auf der Schriftart und Größe mit Methoden in der grafischen Bibliothek.

Ich habe es in C# und Java gemacht. in C# heißt es "MeasureString" und in Java "FontMetrics".

EDIT:

Sehen Sie, wenn dieser Code nützlich ist (ich habe kompiliere es nicht, weil ich hier nicht Android SDK):

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); 
    } 

ähnliche Methoden für Android verfügbar sind:

Messen Sie den Text und stoppen Sie früh, wenn die gemessene Breite maxWidth überschreitet.

measureText(String text) 

Return die Breite des Textes.

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

+0

funktionierte nicht in android, @sniurkst, Wenn Sie perfekte Antwort haben, dann bitte posten Sie es. – Jayesh

Verwandte Themen