5

Also ich habe zwei TextViews pro Zeile in einer ListView. Einer sollte links und der andere rechts ausgerichtet sein. Beide TextViews haben ein abgerundetes Rechteck als Hintergrund, der den Text einfach umschließen sollte. So kam ich mit auf den Punkt:Richten Sie zwei TextViews, eine links die andere rechts, auf einer ListView ohne die Hintergründe zu strecken

<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> 

Es sieht gut aus für lange Texte, aber nicht für kürzere Nachrichten:

enter image description here

Ich habe auch versucht ein Linearlayout wie folgt aus:

<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> 

Dies funktioniert für kurze, aber nicht für lange Nachrichten:

enter image description here

Ist es irgendwie möglich, die kombinierte Breite des TextViews zu messen und programmatisch zwischen diesen Layouts zu wechseln, oder mache ich hier etwas falsch?

+1

Legen Sie einige Layout Gewicht –

+0

Try android: layout_weight = "1" für beide – Android2390

+0

Wie soll die beiden 'TextViews' strecken, wenn das erste ein klein ist und der zweite ist groß? – Luksprog

Antwort

6

Funktioniert das wie gewünscht?

<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> 

Durch die layout_weight Parameter angeben und sie gleich zu machen, sagen Sie die Layout-Engine jede freie Zimmer zu gleichen Teilen zwischen den beiden Ansichten zuzuordnen. Wenn Sie möchten, dass der linke Block größer als der rechte ist, können Sie ihm ein größeres Gewicht geben.

Edit: Vielleicht ist das besser:

<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

Nein, nicht genau. Sicher funktioniert dies für lange Texte, aber für kurze Texte [streckt die Hintergründe] (http://img225.imageshack.us/img225/8269/linearstetretchedbg.png). Idealerweise sollte der Hintergrund nur den Text umbrechen und zwischen den Bubbles sollte Platz für Kurznachrichten sein, wie im zweiten Bild oben. – wollan

+0

Schön! Sie in 'ViewGroups' zu verpacken, hat nie daran gedacht. Allerdings habe ich für "android: layoutDirection" eine "No resource identifier found" gefunden. Aber das zweite innere 'LinearLayout' zu einem' FrameLayout' zu wechseln und ein 'android: layout_gravity =" right "' hat den Trick gemacht. Danke! – wollan

Verwandte Themen