0

ändern muss Ich habe einige kurze Sätze in TextViews vertreten. Ich tat das unter Verwendung eines recyclerView mit einem GridLayoutManager und setze jeden Satz auf einem TextView auf jeder Zelle des Rasters. Die Sache ist, dass ich möchte, dass jede Zelle des Gitters ihre Breite gemäß dem Text in der TextView ändert. Ich meine, ein langer Satz könnte den Bildschirm in voller Breite einnehmen, oder wenn der Satz sehr kurz ist, müssen sie in derselben Zeile stehen.wie man Spaltenbreite mit der inneren Textlänge in Recyclerview

Ich habe auch versucht, eine GridView, aber ich konnte auch nicht das gewünschte Ergebnis erhalten.

Irgendeine Idee, wie man das bekommt?

EDIT

item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/unselected_term" 
     android:padding="10dp"> 

     <TextView 
      android:id="@+id/item_text" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:textColor="@color/term_text" 
      android:gravity="center" 
      android:textSize="18sp"/> 

</LinearLayout> 

EDIT 2

Desired layout

Dies ist ein Beispiel dafür, wie das Layout aussehen soll. Die Länge jedes Elements ist nicht immer gleich. Ich brauche also ein Layout, bei dem die größeren Elemente mehr Breite als die kürzeren haben.

+0

Können Sie Ihre XML hier posten? Das Layout, das Sie für Recyclerview Artikel – Umair

+0

@Umair Code hinzugefügt haben :) –

+0

Ich habe die Antwort aktualisiert bitte überprüfen Sie und lassen Sie mich wissen, ob es für Sie funktioniert. – Umair

Antwort

2

Wenn Sie das untere Layout verwenden, ändert sich die Größe Ihres Zeilenelements entsprechend Ihrem Text. Bitte versuchen Sie es und sagen Sie, ob es für Sie arbeitet.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:custom="http://schemas.android.com/apk/res-auto" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="5dp"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorPrimaryLight" 
    android:padding="10dp"> 

    <TextView 
     android:id="@+id/item_text" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:minWidth="100dp" 
     android:textColor="@color/primary_text" 
     android:gravity="center" 
     android:textSize="18sp"/> 

    </LinearLayout> 
</LinearLayout> 
+0

Wenn Sie keine Breite beibehalten möchten, wenn kein Text vorhanden ist, entfernen Sie das Attribut android: minWidth aus textview. – Umair

+0

Vielen Dank für Ihre Hilfe, aber das Problem wird nicht gelöst, da die Elemente immer in zwei Spalten sind. Ich habe ein Bild hochgeladen, um besser zu zeigen, was ich erreichen möchte. –

+0

@ IvánRodríguezTorres soweit ich verstehe, möchten Sie den größeren Text in der Mitte und kleineren Text im unteren angezeigt werden. und gleichzeitig wollen Sie ihre Breite vollständig von der Größe des Textes in dem gegebenen Bereich abhängig sein, richtig? – Umair

2

Sie müssen StaggeredGridLayoutManager für Ihre RecycelrView verwenden. StaggeredGridLayoutManager darüber und verwenden.

+0

Könnten Sie bitte etwas mehr ausarbeiten? Ich habe mit dem StaggeredGrid gespielt, aber ich habe nicht das gewünschte Ergebnis. Das Problem ist, dass die Anzahl der Spalten und Zeilen, die ich brauche, dynamisch ist. Es wird sich je nach geladenem Text ändern. Ich habe die Frage zur Klärung aktualisiert. –

Verwandte Themen