Podgląd tekstu z długim tekstem wypycha inne widoki w GridLayout pomimo elipsy = koniec

Mój problem jest bardzo podobnyJak uzyskać układ, w którym jeden tekst może rosnąć i elipsować, ale nie może pochłaniać innych elementów układu, ale przeczytaj poniżej, dlaczego nie mogę używać TableLayouts zgodnie z propozycją.

Próbuję utworzyć wiersz listview, który wygląda tak:

| TextView | Zobacz 1 | Zobacz 2 |

Wszystkie widoki zawierają elementy o zmiennej szerokości. TextView ma zestaw elipssize = „end”. Widok 1 powinien wyrównać do lewej strony widoku tekstowego, podczas gdy widok 2 powinien być wyrównany do prawej strony ekranu. Normalnie, pomiędzy widokiem 1 a widokiem byłyby białe znaki. Gdy tekst w TextView wydłuża się, TextView powinien rosnąć, popychając View 1 w prawo, aż nie będzie już białych znaków. Następnie należy włączyć elipsę, wycinając tekst w TextView i dołączając elipsę („...”) na końcu.

Wynik powinien wyglądać mniej więcej tak:

+----------------------------------------+
| short text [view1]             [view2] |
+----------------------------------------+
| long text with ell ... [view1] [view2] |
+----------------------------------------+

Próbowałem:

TableLayouts, ale wydaje się, że przewijanie jest bardzo powolne na niektórych urządzeniach.RelativeLayouts, ale albo miałem nakładające się widoki, albo widok 1 lub widok 2 zniknął całkowicie.GridLayouts, ale TextView zawsze rośnie, dopóki nie zajmie całej szerokości ekranu, w ten sposób wypychając widok1 i widok2 z ekranu.

To jest GridLayout, którego próbowałem:

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:layout_gravity="left|fill_horizontal"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Long text to demonstrate problem with TextView in GridLayout taking up too much space despite ellipsis" />

    <TextView
        android:layout_gravity="left"
        android:text="(view1)" />

    <TextView
        android:layout_gravity="right"
        android:text="(view2)" />
</GridLayout>

View 1 i View 2 nie są tak naprawdę TextViewami, po prostu użyłem ich w celu uproszczenia rzeczy.

Czy jest jakiś sposób na osiągnięcie tego bez użycia TableLayouts?

EDYTOWAĆ: Zgodnie z prośbą, oto moja próba rozwiązania tego problemu za pomocą RelativeLayout. W tym przypadku TextView zajmuje całą szerokość ekranu, więc ani widok1, ani widok2 nie są widoczne.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/rl0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Long text to demonstrate problem with TextView in GridLayout taking up too much space despite ellipsis" />

    <TextView
        android:id="@+id/rl1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/rl0"
        android:layout_marginLeft="10dp"
        android:text="(view1)" />

    <TextView
        android:id="@+id/rl2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/rl1"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:text="(view2)" />
</RelativeLayout>

questionAnswers(14)

yourAnswerToTheQuestion