2016-06-27 26 views
0

Wir verwenden eine ExpandableList von TableViews, um einen Textblock mit Zeilennummern auf einer Seite anzuzeigen. Zuerst wird die Zeichenfolge für einen bestimmten Absatz in einer Textansicht in der rechten Spalte der TableView festgelegt. Dann wird eine Zeilennummernzeichenfolge aus der Absatzzeichenfolge und einer Startzeilennummer generiert. Zum Beispiel aus der Zeichenfolge (mit einem Startzeilennummer 1):Erkennen, ob TextView eine Zeile umschließt

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 
Donec ultricies a nunc sit amet venenatis. 
Aenean placerat dictum nunc, 
nec pulvinar arcu consequat a. 
Proin dignissim velit ut augue dictum ultricies. 
Fusce lorem dolor, elementum id tempor at, 
pellentesque eu dolor. Vestibulum rhoncus 
arcu in sapien sagittis gravida. 
Nullam vel nisl enim. 
Maecenas scelerisque at quam non congue. 
Nullam quis porttitor purus, nec interdum tellus. 

die folgende Zeile Zahlenkette erzeugt wird:

\n\n\n\n5.\n\n\n\n\n10.\n\n 

Diese Zeichenkette dann in der Spalte ganz links des Tableview platziert um die Zeilennummer der Zeichenfolge alle fünf Zeilen anzuzeigen.

Ein Problem tritt jedoch auf, wenn die Textgröße auf einen Punkt erhöht wird, an dem die Textzeilen umgebrochen werden (weil die Zeile zu groß ist, um auf den Bildschirm zu passen). Wenn dies geschieht, scheint es notwendig zu sein, ein anderes \ n in die Zeilennummernzeichenfolge an der Stelle des Zeilenumbruchs einzufügen, um die möglicherweise mehrere Zeilen des umbrochenen Textes als eine einzelne Zeile zu zählen. Gibt es also irgendwie für Android zu erkennen, ob eine Zeile in eine TextView eingebunden wurde, so dass das Programm wissen kann, dass ein \ n in den Zeilennummern-String eingefügt und Zeilenumbrüche ausgeglichen werden sollen?

Antwort

0

Zuerst können Sie die Bildschirmbreite berechnen, die für das String-Rendering erforderlich ist. Vergleichen Sie das mit Ihrem gesamten Gerät/View mit, um zu prüfen, ob Sie '\ n' für den Textumbruch einfügen müssen.

PS: Der Code ist nicht getestet, sollte aber funktionieren. Wenn Sie eine benutzerdefinierte Schriftart verwenden, können Sie Typeface.DEFAULT durch Ihre eigene ersetzen.

public float computeTotalWidthOnScreen(String text) { 
     final Typeface typeface = Typeface.DEFAULT; 
     final Paint paint = new Paint(); 
     final Rect bounds = new Rect(); 
     paint.setTypeface(typeface); 
     paint.setAntiAlias(true); 
     paint.setTextSize(defaultFontSize); 
     paint.getTextBounds(text, 0, text.length(), bounds); 

     return bounds.width(); 
    } 
+0

Immer, wenn ich versuche, die getWidth() - Methode von textView zu verwenden, wird 1300 zurückgegeben, während die Funktion Werte im Bereich 200-300 für den Text zurückgibt. Doch die Linie wird immer noch umhüllt. Weißt du warum das so ist? – Paradoxian