Android Layout: Wrap zwei Textansicht

9

Ich möchte das folgende Layout erreichen

%Vor%

Wo AAAA eine Textansicht (ellipsize="end") ist und BBB auch eine Textansicht ist. Es wird nie mehr als zwei Zeilen haben. Ich brauche nur die erste Textansicht, die um die zweite Art gewickelt wird.

Wie soll ich das machen? Danke

Bearbeiten: Screenshot hinzugefügt

    
Stephane 26.09.2014, 00:37
quelle

5 Antworten

1

Endergebnis

Erläuterung

Es ist keineswegs perfekt und wird wahrscheinlich einige Feinabstimmungen brauchen, um es Ihren Bedürfnissen anzupassen. Ich habe den ellipsize -Teil weggelassen, um ihn generischer zu machen, aber es wäre einfach, den Code dafür anzupassen. Die Idee ist einfach, aber ich brauchte ein paar Stunden (nur weil es Sonntag ist), damit es funktioniert. Wir berechnen, wie viele Zeichen aus dem zweiten TextView in die letzte Zeile des ersten passen würden. Dann fügen wir mit der Nummer die letzte Zeile zum zweiten TextView mit einer Farbe hinzu, die dem Hintergrund des Containers entspricht. Dies ist eine Einschränkung, die wahrscheinlich irgendwie gelöst werden könnte, aber ich kann sie nicht finden.

Damit hätten wir die beiden Ansichten mit ausgerichtetem Text, aber sie überlappen sich immer noch nicht, um den Wrap-Effekt zu ermöglichen. Wir erhalten also die Höhe des Textes und fügen dem zweiten einen negativen Rand hinzu, so dass sie sich überlappen. Damit das erste TextView über dem zweiten steht, müssen wir bringToFront() aufrufen, um zu vermeiden, dass der Text mit die gleiche Farbe wie der Hintergrund über der letzten Zeile des ersten (wow das wird verwirrend). Es funktioniert möglicherweise nicht gut mit verschiedenen Schriftarten und Gewichtungen (fett zum Beispiel), da die Zeichen wahrscheinlich mehr Platz benötigen.

Ich habe es nicht zu einer Methode gemacht, aber es könnte leicht generisch und wiederverwendbar werden, wollte nur beweisen, ob ich es tun könnte oder nicht. Hier ist der Code, den jeder und alle genießen und verbessern können. Das Layout ist einfach ein Container (ein RelativeLayout zum Beispiel) und zwei Textansichten mit den IDs first und second . Ich habe die Textfarbe auf dem zweiten rot gesetzt, um es klarer zu machen, aber es ist nicht notwendig / p>

Code

%Vor%     
Juan Cortés 28.09.2014, 19:06
quelle
1

In RelativeLayout mache Textview AAA normale 2 Zeilen hohe Textansicht ohne Ellipse und mache Textview BBB mit Text "... BBBBBBBB" und mit nicht transparentem Hintergrund, so dass Textview AAA hinter BBB nicht sichtbar ist.

Die zweite Möglichkeit ist, es programmatisch zu machen - berechnen Sie die Anzahl der Buchstaben und schneiden Sie diese ab, wenn sie länger ist als sie sein sollte.

Aber keiner dieser 2 "Hacks" funktioniert bei 100%, wenn Sie keine Monospace-Schriftart verwenden. Entschuldigung für mein Englisch.

%Vor%

Sie müssen auch die Anzahl der Buchstaben in der Zeichenfolge für AAA und so in BBB zählen. Wenn die Summe dieser 2 Beträge mehr als erlaubt ist (Texte überlappen sich), fügen Sie "..." vor BBB-String:

%Vor%     
Incredible 28.09.2014 16:26
quelle
0

Die perfekteste und genaueste Lösung konnte nur erreicht werden durch: FontMetrics Ссылка Mit dieser Klasse können wir Zeichen, Strings usw. messen.

    
Incredible 28.09.2014 19:47
quelle
-1

Ohne Verwendung einer Bibliothek.

%Vor%     
waelhe 26.09.2014 04:05
quelle
-1

Sie können html

verwenden %Vor%     
Yossi Gruner 29.09.2014 13:54
quelle

Tags und Links