5

Quindi ho due TextViews per riga in un ListView. Uno dovrebbe essere lasciato e l'altro allineato a destra. Entrambi TextViews hanno un rettangolo arrotondato come sfondo che dovrebbe solo racchiudere il testo all'interno. Così sono arrivato fino a questo:Allinea due TextView, uno a sinistra dell'altro a destra su ListView senza allungare gli sfondi

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/text_right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/bubble_purple" 
     android:gravity="center" > 
    </TextView> 

    <TextView 
     android:id="@+id/text_left" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@id/text_right" 
     android:background="@drawable/bubble_blue" 
     android:gravity="center" > 
    </TextView> 
</RelativeLayout> 

Sembra buono per i testi lunghi, ma non per i messaggi brevi:

enter image description here

Ho anche provato un LinearLayout come questo:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/text_left" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:background="@drawable/bubble_blue" 
     android:gravity="center" > 
    </TextView> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/text_right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:background="@drawable/bubble_purple" 
     android:gravity="center"> 
    </TextView> 
</LinearLayout> 

Funziona per messaggi brevi ma non per quelli più lunghi:

enter image description here

È in qualche modo possibile misurare la larghezza combinata di TextViews e passare da un layout all'altro tra questi layout oppure sto facendo qualcosa di sbagliato qui?

+1

mettere un po 'di peso di layout –

+0

Prova android: layout_weight = "1" sia per – Android2390

+0

Come dovrebbero i due 'TextViews' allungare se il primo è piccolo e il secondo è grande? – Luksprog

risposta

6

Funziona come vuoi?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

<TextView 
    android:id="@+id/text_right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5" 
    android:background="@drawable/bubble_blue" 
    android:text="2" 
    android:gravity="center" > 
</TextView> 

<TextView 
    android:id="@+id/text_left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5" 
    android:background="@drawable/bubble_purple" 
    android:text="9" 
    android:gravity="center" > 
</TextView> 
</LinearLayout> 

Aggiungendo i parametri layout_weight e rendendoli uguali, vi dico il motore di layout di destinare ogni stanza degli ospiti in parti uguali tra i due punti di vista. Se desideri che il blocco di sinistra sia più grande di quello di destra, puoi dargli un peso maggiore.

Edit: Forse questo è meglio:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

<LinearLayout 
    android:id="@+id/text_left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#456" 
     android:text="5 + 1" 
     android:gravity="center" > 
    </TextView> 

</LinearLayout> 

<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text=" = " > 
</TextView> 

<LinearLayout 
    android:id="@+id/text_right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layoutDirection="rtl" 
    android:layout_weight="0.5"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="#856" 
      android:text="6" 
      android:gravity="center" > 
     </TextView> 

</LinearLayout> 

</LinearLayout> 
+0

No, non esattamente. Certo, funziona per testi lunghi, ma per testi brevi questo [allunga gli sfondi] (http://img225.imageshack.us/img225/8269/linearstretchedbg.png). Idealmente, lo sfondo dovrebbe solo avvolgere il testo e dovrebbe esserci spazio tra le bolle per i messaggi brevi, come nella seconda immagine sopra. – wollan

+0

Bello! Avvolgendoli in 'ViewGroups', non ci hai mai pensato. Tuttavia, ho ottenuto un "Nessun identificativo risorsa trovato" per 'android: layoutDirection'. Ma passare il secondo 'LinearLayout 'interno a un' FrameLayout' e aggiungere un 'android: layout_gravity =" right "' ha fatto il trucco. Grazie! – wollan

Problemi correlati